メタデータの反映
SQLAlchemy はORM として動作することも可能で、データベーステーブルのレコードをインスタンス化可能なレコードとして扱うことができます。この機能を使用するには、次の方法の1つを使って参照先のメタデータを反映する必要があります。
マッピングクラスを使用したデータのモデル化
ORM でモデル化するテーブルのマッピングクラスを宣言します。これは"sqlalchemy.ext.declarative.declarative_base" を使って行います。データモデル内の既知のテーブルは、以下の例のように、部分的または完全にモデル化されます。
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class [CData].[Default].Customers(Base): __tablename__ = "[CData].[Default].Customers" _id = Column(String, primary_key=True) City = Column(String) CompanyName = Column(String)
自動でのメタデータの反映
手動でテーブルをマッピングする他に、SQLAlchemy は1つ以上のテーブルのメタデータを自動で見つけることができます。automap_base によって、データモデル全体でメタデータの発見を実現します。
from sqlalchemy import MetaData from sqlalchemy.ext.automap import automap_base meta = Metadata() base = automap_base(metadata=meta) base.prepare() [CData].[Default].Customers = base.classes.[CData].[Default].Customers
その他に、1つのテーブルの情報であればインスペクターを使用して反映することもできます。この方法で反映させる場合には、マップする特定のカラムのリストはオプションです。
from sqlalchemy import MetaData, Table from sqlalchemy.engine.reflection import inspector meta = Metadata() insp = Inspector.from_engine(engine) [CData].[Default].Customers_table = Table("[CData].[Default].Customers", meta) insp.reflecttable([CData].[Default].Customers_table, ["_id","City","CompanyName"])