Pythonでのデータベース操作において、非常に広く使われている「SQLAlchemy」についてまとめました。
1. SQLAlchemyとは?
SQLAlchemy(エスキューエルアルケミー)は、Python向けに提供されている強力な**SQLツールキット兼ORマッパー(ORM)**です。
Djangoの中核であるDjango ORMとは異なり、FlaskやFastAPIなど特定のWebフレームワークに依存しない独立したデータベースライブラリであり、Pythonエコシステムにおいて事実上の標準(デファクトスタンダード)として多くのプロジェクトで採用されています。
2. 独自の2層アーキテクチャ
SQLAlchemyの最大の特徴は、「Core」と「ORM」という2つのアプローチを使い分けられる点にあります。
| コンポーネント | 説明 |
|---|---|
| SQLAlchemy Core | SQL文をPythonのコードで直接組み立てるための機能(SQL Expression Language)を提供します。SQLに近い柔軟な記述ができ、高いパフォーマンスが求められる処理に適しています |
| SQLAlchemy ORM | Core層の上に構築されており、データベースのテーブルをPythonの「クラス」として、レコードを「オブジェクト」として紐付け(マッピング)します。日常的なデータ操作(CRUD)に便利です |
3. なぜSQLAlchemyが選ばれるのか?
ORマッパーとしての利便性を保ちつつ、SQL本来の柔軟性を損なわない作りが多くのエンジニアに支持されています。
- 圧倒的な柔軟性:ORMだけでは解決しにくい複雑なクエリが必要になった際、無理にORMの文法をひねり出すのではなく、すぐ下のCore層を利用して高度なクエリを書くことができます。
- フレームワーク非依存:特定のフレームワークに縛られないため、データ分析の小さなスクリプトから大規模なFastAPIウェブサーバーまで、まったく同じ技術と知識を使い回せます。
- データベースの抽象化:SQLite、MySQL、PostgreSQLなど、裏で動くデータベースの種類を問わず、ほとんど同じPythonコードで操作が可能です。
4. インストールと始め方
通常のPythonパッケージと同様に、pipを使ってインストールします。
ターミナル
pip install SQLAlchemy
5. 基本的なコード例(ORMの使用例)
ここでは、SQLAlchemy 2.0系で導入された最新の書き方を用いた、ごく簡単なモデル定義とデータ追加のイメージをご紹介します。
example.py
from sqlalchemy import create_engine, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
# 1. データベースの接続設定(ここではオンメモリのSQLiteを使用)
engine = create_engine("sqlite:///:memory:", echo=True)
# 2. テーブルのベースとなるクラス
class Base(DeclarativeBase):
pass
# 3. モデル(テーブル構造)の定義
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(50))
email: Mapped[str] = mapped_column(String(100), unique=True)
# 4. データベース上にテーブルを作成
Base.metadata.create_all(engine)
# 5. データの追加(オブジェクトとして扱う)
with Session(engine) as session:
new_user = User(name="Naoki", email="naoki@example.com")
session.add(new_user)
session.commit() # ここで実際のINSERT文が実行されます
このように、Pythonのクラスとしてテーブル構造(モデル)を定義でき、レコードの追加や取得もオブジェクトを操作する感覚で直感的に行えるのが大きな魅力です。
今回はここまでです。
