我正在尝试查询表,并且仅返回与联接表聚合条件匹配的结果。具体来说,假设我们有两个表src
和A
,它们被定义为具有一对多关系的表(声明性基数):
B
我希望能够查询class A(Base):
__tablename__ = "a"
id = Column(Integer, primary_key=True)
bees = relationship("B", back_populates="a", lazy="joined")
class B(Base):
__tablename__ = "b"
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey("a.id"), index=True)
a = relationship("A", back_populates="bees")
state = Column(String)
value = Column(Integer)
的聚合结果的A
,例如 “返回所有A的链接B的值之和状态等于“ DONE”的值大于20000“ 。
如果我没记错的话,它对应于以下SQL查询(仅返回A对象的ID):
B
理想情况下,我想使用混合属性(我们将其称为SELECT a.id
FROM a LEFT OUTER JOIN b ON a.id = b.a_id
group by a.id
having sum(case when b.state='DONE' then b.value end else 0) > 20000
),以便可以使用例如remaining_value
或session.query(A).filter(A.remaining_value > 20000)
。