始める無料で始める

データベースからテーブルを自動ロードする

SQLAlchemy では、リフレクションと呼ばれる機能を使って、データベースからテーブルを自動的に読み込めます。リフレクションとは、データベースを読み取り、その情報に基づいてメタデータを構築するプロセスです。手作業で Table を作成するのとは逆で、既存のデータベースを扱う際にとても便利です。

リフレクションを行うには、まず MetaData オブジェクトをインポートして初期化します。MetaData オブジェクトには、データベースに格納されているテーブルの情報が含まれます。リフレクションの間に、MetaData オブジェクトは反映されたテーブルの情報で自動的に埋められるため、反映の前に MetaData() を呼び出して初期化するだけで十分です。

また、SQLAlchemy パッケージから Table オブジェクトをインポートする必要があります。次に、この Table オブジェクトを使ってエンジンからテーブルを読み込み、カラムを自動ロードし、メタデータを埋めます。これは Table() を1回呼び出すだけで行えます。このように Table オブジェクトを使うのは、関数に引数を渡すのに近いイメージです。たとえば、エンジンでカラムを自動ロードするには、Table() にキーワード引数 autoload=Trueautoload_with=engine を指定します。

最後に、作成したオブジェクトの情報を確認するには、repr() 関数を使います。任意の Python オブジェクトに対して、repr() はそのオブジェクトの文字列表現を返します。SQLAlchemy の Table オブジェクトの場合、メタデータに含まれるそのテーブルの情報が返されます。

この演習では、engine 上で利用可能な "census" テーブルをリフレクトし、census という変数に格納してください。前の演習で作成したエンジンを生成するコードはすでに用意されています。

この演習はコースの一部です

Pythonで学ぶデータベース入門

コースを見る

演習の手順

  • sqlalchemy から TableMetaData をインポートします。
  • 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(____)
コードを編集して実行