#SQLAlchemy
8 件の記事
SQLAlchemy 2.0 #7 Alembic と実戦構成 — マイグレーション、非同期、チーム規約
シリーズ最終回として運用フェーズのテーマを整理します。create_all がスキーマ変更を解決できない理由と Alembic の導入、autogenerate が検知できるものと見落とすもの、マイグレーションファイルのレビュー原則、create_async_engine と AsyncSession に移行する非同期構成と遅延ロードの制約、モデル・セッション・設定を配置するプロジェクト構造、チームで守る規約まで扱います。
SQLAlchemy 2.0 #6 クエリ応用 — 結合、集計、サブクエリ、大量処理
select() ひとつで実戦的なクエリを組み立てる方法を整理します。scalars と execute の戻り値の形の違い、複数条件と or_、結合と明示的な ON 句、group_by と集計関数にラベルを付けて読む方法、サブクエリと EXISTS、LIMIT・OFFSET ページネーションとその限界、ORM の単位作業を迂回する大量 INSERT・UPDATE まで、2.0 スタイルのクエリの実務レパートリーを扱います。
SQLAlchemy 2.0 #5 リレーション — 1:N、N:M、そして N+1 問題
ORM の花形であり罠でもある relationship を整理します。外部キーと relationship の役割分担、back_populates で双方向をつなぐ 1:N の宣言、secondary テーブルを使う N:M、親削除時の子の扱いを決める cascade と delete-orphan、遅延ロードが生む N+1 問題を echo ログで確認する方法、selectinload と joinedload で解決する基準まで扱います。
SQLAlchemy 2.0 #4 セッション — 変更追跡、flush と commit、オブジェクトの 4 つの状態
ORM の心臓部である Session を整理します。セッションが単位作業(Unit of Work)として変更をため込み、まとめて SQL として送り出す仕組み、flush と commit の違い、transient・pending・persistent・detached というオブジェクトの 4 状態、同じ行には同じオブジェクトを返す identity map、commit 後の属性アクセスが再クエリを発行する理由、Web アプリケーションではリクエストごとにセッション 1 つというスコープ原則まで扱います。
SQLAlchemy 2.0 #3 ORM モデル定義 — DeclarativeBase、Mapped、mapped_column
テーブルを Python クラスとして宣言する 2.0 スタイルの ORM モデル定義を整理します。DeclarativeBase を継承する構造、Mapped 型ヒントと mapped_column の役割分担、Python の型が DB の型にマッピングされるルール、Optional と nullable の連動、デフォルト値・ユニーク制約・インデックスの宣言、制約名を自動で付ける命名規約まで扱います。
SQLAlchemy 2.0 #2 エンジンとトランザクション — コネクションプールと commit の 2 パターン
SQLAlchemy の土台であるエンジンとトランザクションを整理します。コネクションプールがなぜ必要でどう動くのか、pool_size と max_overflow が実際に制限しているもの、connect() と begin() で分かれる commit-as-you-go と begin-once のパターン、トランザクションが自動コミットされない理由、MetaData と Table でテーブルを定義し Core の式で CRUD を実行するところまで扱います。
SQLAlchemy 2.0 #1 全体像 — Core と ORM、そして 2.0 スタイル
Python の DB ライブラリの事実上の標準である SQLAlchemy を基礎から整理するシリーズの第 1 回です。Core と ORM という 2 層の構造、1.x 時代のコードと 2.0 スタイルが違う理由、select() を中心に統一されたクエリの書き方と型ヒント対応、インストールと最初の接続、text() で SQL を直接実行するところまで扱います。
モダンPython実践 #3 DB 連携 — SQLAlchemy 2.x + Alembic
SQLAlchemy 2.x の新スタイル — Mapped/mapped_column、async セッション、FastAPI の依存性注入との結合、Alembic のマイグレーションまで整理します。