データベースからテーブルを自動ロードする
SQLAlchemy では、リフレクションと呼ばれる機能を使って、データベースからテーブルを自動的に読み込めます。リフレクションとは、データベースを読み取り、その情報に基づいてメタデータを構築するプロセスです。手作業で Table を作成するのとは逆で、既存のデータベースを扱う際にとても便利です。
リフレクションを行うには、まず MetaData オブジェクトをインポートして初期化します。MetaData オブジェクトには、データベースに格納されているテーブルの情報が含まれます。リフレクションの間に、MetaData オブジェクトは反映されたテーブルの情報で自動的に埋められるため、反映の前に MetaData() を呼び出して初期化するだけで十分です。
また、SQLAlchemy パッケージから Table オブジェクトをインポートする必要があります。次に、この Table オブジェクトを使ってエンジンからテーブルを読み込み、カラムを自動ロードし、メタデータを埋めます。これは Table() を1回呼び出すだけで行えます。このように Table オブジェクトを使うのは、関数に引数を渡すのに近いイメージです。たとえば、エンジンでカラムを自動ロードするには、Table() にキーワード引数 autoload=True と autoload_with=engine を指定します。
最後に、作成したオブジェクトの情報を確認するには、repr() 関数を使います。任意の Python オブジェクトに対して、repr() はそのオブジェクトの文字列表現を返します。SQLAlchemy の Table オブジェクトの場合、メタデータに含まれるそのテーブルの情報が返されます。
この演習では、engine 上で利用可能な "census" テーブルをリフレクトし、census という変数に格納してください。前の演習で作成したエンジンを生成するコードはすでに用意されています。
この演習はコースの一部です
Pythonで学ぶデータベース入門
演習の手順
sqlalchemyからTableとMetaDataをインポートします。MetaDataオブジェクトmetadataを作成します。Tableオブジェクトを使ってcensusテーブルをリフレクトします。引数は次のとおりです:- 文字列のテーブル名(
'census')。 - いま初期化したメタデータ。
autoload=True- 自動ロードに使うエンジン(この場合は
engine)。
- 文字列のテーブル名(
repr()関数を使ってcensusの詳細を出力します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import create_engine, MetaData, and Table
from sqlalchemy import create_engine, ___, ____
# Create engine: engine
engine = create_engine('sqlite:///census.sqlite')
# Create a metadata object: metadata
metadata = ___
# Reflect census table from the engine: census
census = Table(____, ____, autoload=____, autoload_with=____)
# Print census table metadata
print(____)