SQLAlchemyは、Pythonプログラムからデータベースを操作するための強力なライブラリです。MySQLやMariaDBなどデータベースに簡単にアクセスできます。ここではレンタルサーバーのカラフルボックスで使うための手順をメモしていきます。
python仮想環境の準備
カラフルボックスは、レンタルサーバーの中でもpythonを使い始めるまでがGUIで簡単に準備できます。まずはpython仮想環境を作っておき、起動している事を確認します。
仮想環境のStatusがStarted(起動中)であることを確認しつつ、起動コマンドを取得します。
Editボタンを押します。
ターミナルで仮想環境を使うためのコマンドをコピーします。
python仮想環境の有効化
2つのコマンドが「&&」でつながっていますが、以下の例では2行に分けて実行しています。(そのままコピペでも勿論OK)
[myserver@tky006 ~]
#python仮想環境を有効化(アクティベート)する
$ source/home/myserver/virtualenv/py31013dev01/3.10/bin/activate
#python仮想環境のアプリケーションディレクトリに移動
$ cd/home/myserver/py31013dev01
先にpython仮想環境内にインストールされているpipを更新しておきましょう。
pipとはPython のパッケージ管理システムです。Pythonのソフトウェアは「パッケージ」という形で配布されていますが、これらのパッケージの取得・更新・削除に使うツールです。SQLALchemyもpipコマンドでインストールします。
((py31013dev01:3.10)) [myserver@tky006 py31013dev01]
$ pip install --upgrade pip
#pipがアップグレードされる
Requirement already satisfied:
pip in /home/myserver/virtualenv/py31013dev01/3.10/lib/python3.10/site-packages (23.1)
Collecting pip Downloading pip-24.2-py3-none-any.whl (1.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 74.4 MB/s eta 0:00:00
Installing collected packages:
pip Attempting uninstall: pip
Found existing installation: pip 23.1
Uninstalling pip-23.1:
Successfully uninstalled pip-23.1
Successfully installed pip-24.2
SQLAlchemyのインストール
同じ要領で pipコマンドでsqlalchemyをインストールしましょう。
((py31013dev01:3.10)) [myserver@tky006 py31013dev01]
$ pip install sqlalchemy
#sqlalchemyがインストールされる
Collecting sqlalchemy
Downloading SQLAlchemy-2.0.32-cp310-cp310 manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 62.6 MB/s eta
Collecting typing-extensions>=4.6.0 (from sqlalchemy)
Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting greenlet!=0.4.17 (from sqlalchemy)
Downloading greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (662 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 662.7/662.7 kB 88.7 MB/s eta
Installing collected packages: typing-extensions, greenlet, sqlalchemy
Successfully installed greenlet-3.0.3 sqlalchemy-2.0.32 typing-extensions-4.12.2
MySQLドライバのインストール
これだけでは動きません。一緒にMySQLなどのデータベースに接続するために必要なドライバも合わせてインストールします。ここでは mysql-connector-python を選択しています。
$ pip install mysql-connector-python
これでSQLALchemyが使えるようになります。
ちなみに、他のMySQLドライバ(例: pymysql や mysqlclient)を使いたい場合は、そのドライバをインストールし、接続文字列を適切に変更します。
#pymysqlを使う場合
$ pip install pymysql
# pymysqlを使うpythonコード上の接続エンジン記述
- connection_string = f'mysql+pymysql://{username}:{password}@{host}/{database_name}'
# mysqlclientを使う場合
$ pip install mysqlclient
# mysqlclientを使う pythonコード上の接続エンジン記述
- connection_string = f'mysql+mysqldb://{username}:{password}@{host}/{database_name}'
SQLAlchemyの使い方
仮想環境を有効にした状態で、SQLAlchemyを使用するPythonスクリプトをします。
以下は【id、名前、年齢】だけの簡単なユーザーテーブルを作成し1行だけデータを入れるSQLAlchemyの使用例です。接続ドライバには【mysql-connector-python】を使用しています。
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# MySQLの接続情報
username = 'your_username'
password = 'your_password'
host = 'localhost'
database_name = 'your_database'
# 接続エンジン mysql-connector-python の作成
connection_string = f'mysql+mysqlconnector://{username}:{password}@{host}/{database_name}'
engine = create_engine(connection_string)
# Baseクラスの作成
Base = declarative_base()
# モデルの定義
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
# テーブルの作成
Base.metadata.create_all(engine)
# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()
# データの追加
new_user = User(name='山田太郎', age=30)
session.add(new_user)
session.commit()
# データのクエリ
users = session.query(User).all()
for user in users:
print(user.name, user.age)
仮想環境の終了
以下のコマンドで仮想環境を無効化し、サーバーのデフォルトインストールされたPython環境に戻ります。
$ deactivate
参考:SQLAlchemyの主な特徴
1. データベース抽象化
SQLAlchemyは、データベースへのアクセスや操作を抽象化します。これにより、ユーザーは生のSQLを直接書かずに、Pythonコードを使ってデータベースとやり取りできます。SQLAlchemyは、さまざまなデータベース(MySQL、PostgreSQL、SQLite、Oracleなど)をサポートしており、異なるデータベース間での移植性が向上します。
2. ORM(Object-Relational Mapping)
SQLAlchemyの最も特徴的な機能の一つがORM機能です。ORMは、データベースのテーブルをPythonのクラスとして扱うことができる仕組みです。これにより、データベースのレコードをオブジェクトとして操作することができます。
3. Core(SQL Expression Language)
SQLAlchemyは、ORMを使用せずに直接SQLのようにデータベース操作を行うための低レベルのAPIも提供しています。この部分を「SQLAlchemy Core」と呼びます。Coreを使うと、PythonでSQL文を生成して実行することができます。
4. データベース接続の管理
SQLAlchemyは、データベース接続の管理も行います。エンジン(engine
)というオブジェクトを使って、データベースとの接続を管理し、複数の接続を効率的に扱うことができます。
5. マイグレーション
SQLAlchemyは、データベーススキーマのバージョン管理をサポートしています。これにより、データベースの構造を変更する際に、コードでその変更を定義して適用することができます。マイグレーションツールとしては、Alembic
がよく使われます。