3
當使用SQLAlchemy的聲明性擴展時,有時將類映射到join
而非單個表很有用。列名衝突時,通常以一對多形式出現,因爲默認情況下所有主鍵都命名爲id
,您可以使用.alias()
爲每個列添加其表名。如果您已經編寫了假定映射類具有非前綴名稱的代碼,那很不方便。在SQLAlchemy中連接表時,是否有一種方便的方法來僅別名衝突的列?
例如:
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
中每個表中的某些列進行別名,以便映射的類爲大多數映射列公開更方便的非前綴屬性名稱?