看一看http://docs.sqlalchemy.org/en/latest/orm/nonstandard_mappings.html
有了這個方法,你應該能夠創造超過你所提到的三個表的映射,並指定參賽表的列的屬性中映射類。
metadata = MetaData()
parent = Table('parent', metadata,
Column('id', Integer, primary_key=True),
Column('child', Integer, ForeignKey('child.id')),
)
child = Table('child', metadata,
Column('id', Integer, primary_key=True),
Column('subchild', Integer, ForeignKey('subchild.id')),
)
subchild = Table('subchild', metadata,
Column('id', Integer, primary_key=True),
Column('some_column', String),
)
joined = join(parent, child, subchild)
Base = declarative_base()
class Parent(Base):
__table__ = joined
id = column_property(parent.c.id, child.c.id, subchild.c.id)
subchild_attr = subchild.c.some_column
有趣的是 - 這是否將查找卸載到數據庫,還是在ORM層處理?作爲一種替代方法,我正在尋找在類上定義一些簡單的getter函數。 – domoarrigato
是的,使用這個mapper的查詢將無需進一步的努力就可以加入所有的三張表。當然你也可以用'@property'來「拉起」嵌套的列,但是你必須使用像'joinedload'這樣的查詢選項,以避免後續的查詢。如果你選擇getter版本,看一下'@hybrid_property'裝飾器。 – roman