第10章. SQLAlchemy ORMと Automapによるリフレクション
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
第 5 章で学んだように、リフレクションは既存のデータベースから SQLAlchemy オブジェクトを生成することができます。リフレクションはテーブル、ビュー、インデックス、外部キーに対して動作します。リフレクションはテーブル、ビュー、インデックス、外部キーに対して働きます。しかし、データベー スのスキーマを ORM スタイルのクラスに反映させたい場合はどうしたらよいでしょうか? 幸運なことに、便利な SQLAlchemy エクステンションの automap を使えば、それができる。
しかし、SQLAlchemy のバージョン 1.0 では、CheckConstraints やコメント、トリガを反映することはできない。 また、クライアントサイドのデフォルトや、シーケンスとカラムの関連付けも反映でき ません。しかし、第6章で学んだメソッドを使って、手作業で追加することは可能です。
第5章と同様、テストにはChinookデータベースを使用する。本書のサンプルコードのCH11/フォルダにあるSQLiteバージョンを使用する。そのフォルダにはデータベーススキーマのイメージも含まれているので、この章を通して扱うスキーマを視覚化することができる。
Automapでデータベースを反映する
データベースを反映させるために、これまでORMで使ってきたdeclarative_base の代わりに、automap_base.例10-1に示すように、Base オブジェクトを作成して作業することから始めよう。
例 10-1. automap_baseでBaseオブジェクトを作成する。
fromsqlalchemy.ext.automapimportautomap_baseBase=automap_base()
次に、反映させたいデータベースに接続したエンジンが必要である。例10-2はChinookデータベースに接続する方法を示している。
例 10-2. Chinookデータベースのエンジンを初期化する
fromsqlalchemyimportcreate_engineengine=create_engine('sqlite:///Chinook_Sqlite.sqlite ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access