看一看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