用SQLAlchemy遍历许多关系

2024-04-18 11:44:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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)

谢谢!这个问题让我头疼。。。在


Tags: keyidchildtruebasetablecolumninteger
1条回答
网友
1楼 · 发布于 2024-04-18 11:44:58

最直接的方式是:

# 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查询不会筛选出重复的实例)。在

相关问题 更多 >