我有一对具有基本父/子关系的模型。孩子有一个领域foo
。我想做一个 SQLAlchemy 查询,该查询将返回所有具有 foo 匹配条件的子对象的 Parent 对象。与那些父母一起,我想返回孩子,但前提是他们符合过滤条件。
这些是我的模型:
class Parent(Model):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship('Child', backref='parent')
class Child(Model):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
foo = Column(String(128))
parent_id = Column(Integer, ForeignKey('parent.id'), nullable=False)
这是一个例子。假设我有父母A
,并且B
。我有孩子a1
,,,a2
和。孩子有, , 等等。b1
b2
a1
foo = 1
a2.foo = 2
我想做一个像“child.foo == 1”这样的查询,并取回这些数据:
[
{
id: 'A',
children: ['a1'],
},
{
id: 'B',
children: ['b1'],
}
]
请注意a2
和b2
不包含在结果中。
到目前为止我已经考虑过两个想法,但还没有解决:
选择子对象,然后构建父对象。
执行此操作时,我无法查询父项上的字段,这也是必需的。
选择父母,然后遍历匹配的父母并进行更多查询以收集匹配的孩子。
这(似乎)需要 O(n) 查询,我不想这样做。