python - SQLAlchemy:在访问时从关系中过滤对象
问题描述
查询语句:获取名称以“A”开头的孩子。将他们与父母联系起来。架构:
我有一对多的关系。父母(id,姓名,孩子(rel->child))->孩子(id,姓名)
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
Name = Column(String)
children = relationship("Child", lazy='joined')
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
Name = Column(String)
想要过滤关系对象。(即,当实例化 Parent.children 时获得的对象列表)被访问。
例如:
[Parent(id=1, Name='Parent1' children=[Child(id='1', Name='AChild1'), Child(id='2', Name='Child2')]
需要过滤到:[Parent(id=1, Name='Parent1' children=[Child(id='1', Name='AChild1')]
访问结果查询时。
如何编写语句以获得上述结果?
解决方案
也许我应该更努力地用谷歌搜索,但这是一些搜索的结果。
当我们使用 时
contains_eager()
,我们正在自己构建将用于填充集合的 SQL。由此,很自然地,我们可以选择修改集合打算存储的值,方法是编写 SQL 来加载集合或标量属性的元素子集。
导致声明:
db.Query(Parent).join(Parent.children)\
.filter(Parent.children.any(Child.Name.like("A%")))\
.options(contains_eager(Parent.children))