SQLAlchemyの宣言型拡張機能join
を使用する場合、単一のテーブルではなくクラスをマップすると便利な場合があります。すべての主キーはデフォルトで名前が付けられているため、列名が衝突する場合、通常は1対多で、すべての列の前にテーブル名を付けることができます。マップされたクラスにプレフィックスなしの名前が付いていると想定するコードをすでに記述している場合、これは不便です。id
.alias()
例えば:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, Integer, ForeignKeyConstraint
Base = declarative_base()
t1 = Table('t1',
Base.metadata,
Column('id', Integer, primary_key=True))
t2 = Table('t2',
Base.metadata,
Column('id', Integer, primary_key=True),
Column('fkey', Integer),
ForeignKeyConstraint(['fkey'], [t1.c.id]))
class ST(Base):
__table__ = t1.join(t2)
class ST2(Base):
__table__ = t1.join(t2).alias()
ST
にはid
、fkey
オーバーライドされた名前を使用する結合の最初のテーブルにマッピングされる各名前のプロパティがあるため、マッピングされたクラスはt2
の主キーを公開しません。ST2
、、およびプロパティt1_id
があります。t2_id
t2_fkey
join
マップされたクラスがほとんどのマップされた列のより便利なプレフィックスなしのプロパティ名を公開するように、各テーブルの一部の列のみをエイリアスする便利な方法はありますか?