首页 > 解决方案 > SQLAlchemy:在访问时从关系中过滤对象

问题描述

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)

如何编写语句以获得上述结果?

加载后过滤它们的解决方案,我想在加载时过滤它们。

标签: pythonsqlpython-3.xsqlalchemy

解决方案


也许我应该更努力地用谷歌搜索,但这是一些搜索的结果。

来自 SQLAlchemy 文档:

当我们使用 时contains_eager(),我们正在自己构建将用于填充集合的 SQL。由此,很自然地,我们可以选择修改集合打算存储的值,方法是编写 SQL 来加载集合或标量属性的元素子集。

导致声明:

db.Query(Parent).join(Parent.children)\
                .filter(Parent.children.any(Child.Name.like("A%")))\
                .options(contains_eager(Parent.children))

推荐阅读