我试图查询一个表,并仅返回那些与联接表聚合上的条件匹配的结果。具体地说,我们有两个表,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
对B
的聚合结果,例如“返回所有状态等于'DONE'的链接B的值总和大于20000的A”
若我并没有弄错的话,这对应于以下SQL查询(只返回A对象的ID):
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)
或session.query(A).group_by(A.id).having(A.remaining_value > 20000)
来查询它
目前没有回答
相关问题 更多 >
编程相关推荐