SQLAlchemy - запрос таблицы по агрегации объединенной таблицы - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь запросить таблицу и вернуть только те результаты, которые соответствуют условию агрегации объединенной таблицы.В частности, скажем, у нас есть две таблицы 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, например "вернуть все А, для которых сумма значений связанных В, имеющих состояние, равное" ВЫПОЛНЕНО ", больше 20000" .

Если я не ошибаюсь, это соответствует следующему запросу SQL (возвращающему только идентификаторы объектов A):

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...