在 SQLAlchemy 中查询 parent 的特定 child

Query for a specific child of a parent in SQLAlchemy

我正在尝试编写一个查询,它将 return 来自 parent.

的 child object

我的模型如下:

class Parent (Base):
    __tablename__ = 'parents'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    children_id = Column(Integer, ForeignKey('children.id'))
    childern = relationship('Child', back_populates='parents')

class Child (Base):
    __tablename__ = 'children'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    parent = relationship('Parent', back_populates='children')

考虑这个例子:有三个 parents,他们的 children:

Alice: Zander, Ygrite, Xaiver
Bob: Will, Ulric, Tammy
Chris: Will, Sam, Xaiver

请注意,克里斯巧合地将他的一些 children 命名为与其他人相同的名字,即使它们是不同的 children。

如果我想具体查找 Chris 的 child Xavier,我的第一直觉是查询 Parent Chris,然后遍历他的 children 直到找到 Xavier 或查询所有 children 都命名为 Xavier,然后遍历它们,直到我找到 parent Chris 的人。

但是,此解决方案无法扩展,而且绝对不会使用 SQLAlchemy 的功能。

在继续研究这一挑战的过程中,我遇到了这个问题和接受的答复:

我测试了这个查询...

s.query(Child).join(Parent, Child.parent).filter(Child.name == 'Xavier').filter(Parent.name == 'Chris')

...它完全符合我的要求。