使用 SQLAlchemy 的多对多关系遍历



我对SQLAlchemy很陌生(而且我对数据库没有太多经验)。我正在尝试遍历两个多对多关系。如果有父母,我怎样才能得到所有独特的孙子孙女?

parent_child_table = Table('parent_child', Base.metadata,
    Column('parent_id', Integer, ForeignKey('parent.id')),
    Column('child_id', Integer, ForeignKey('child.id'))
)
class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child",
                    secondary=parent_child_table,
                    backref="parents")
child_grandchild_table = Table('child_grandchild', Base.metadata,
    Column('child_id', Integer, ForeignKey('child.id')),
    Column('grandchild_id', Integer, ForeignKey('grandchild.id'))
)
class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    grandchildren = relationship("Grandchild",
                         secondary=child_grandchild_table,
                         backref="children")
class Grandchild(Base):
    __tablename__ = 'grandchild'
    id = Column(Integer, primary_key=True)

谢谢!这个问题让我头疼...

最直截了当的方式:

# my_parent = ... (instance of Parent)
q = (session.query(Grandchild)
        .join(Child, Grandchild.children)
        .join(Parent, Child.parents)
        .filter(Parent.id == my_parent.id)
        )

sqlalchemy将仅返回唯一的Grandchild实例(尽管 SQL 查询不会筛选出重复项)。

最新更新