通过中间的 sqlalchemy 关系 table

sqlalchemy relationship through an intermediate table

我有三个相关的类:Parent、Child、SubChild。在这两种情况下,这种关系都是一对多的。我已将其设置为 child.parent 正确引用,当然 sub_child.child.parent 也能正常工作。

问题是我实际上从来不需要知道 sub_child.child,但我确实需要知道 sub_child 的最终父级。我想建立一个关系,这样 sub_child.parent 将 return 对最终父对象的引用。

这可能吗,还是一个坏主意?我已阅读文档,但没有看到太多看起来有希望的内容。

我在 mysql 上使用 python2 和 sqlalchemy orm 作为后端。

看看http://docs.sqlalchemy.org/en/latest/orm/nonstandard_mappings.html

使用此方法,您应该能够在您提到的三个表上创建映射,并将参与表的列作为属性分配给映射 class。

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