SQLAlchemy查询表(按联接选项卡的聚合)

2024-09-22 20:37:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图查询一个表,并仅返回那些与联接表聚合上的条件匹配的结果。具体地说,我们有两个表,AB,定义为具有一对多关系的(声明性基):

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)

我希望能够查询AB的聚合结果,例如“返回所有状态等于'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)来查询它


Tags: keyidtruebasevaluebackcolumninteger