有时在使用SQLAlchemy的声明性扩展join
时,将类映射到 a 而不是单个表很有用。当列名发生冲突时,通常是一对多的,因为默认情况下所有主键都是命名的,您可以使用为每列添加其表名的前缀。如果您已经编写了假定映射类具有非前缀名称的代码,那将很不方便。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
以便映射类为大多数映射列公开更方便的非前缀属性名称?