在 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')
...它完全符合我的要求。
我正在尝试编写一个查询,它将 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')
...它完全符合我的要求。