Я пытаюсь написать гибридное свойство expression
, которое возвращает сумму результатов двух запросов. Пока все мои попытки провалились. Вот упрощенный пример:
class House(Model):
rooms = db.relationship('Room', backref='house', lazy='joined')
gardens = db.relationship(
'Garden', backref='house', lazy='joined'
)
@hybrid_property
def total_area(self):
"""Return the sum total of the areas of all rooms and gardens."""
return sum([_.area for _ in (self.rooms + self.gardens)])
@total_items.expression
def total_area(cls):
"""Returns an SQLA expression for querying total_area."""
total_room_area = (
select([db.func.sum(Room.area)])
.where(Room.houseID == cls.id)
)
total_garden_area = (
select([db.func.sum(Garden.area)])
.where(Garden.houseID == cls.id)
)
# This doesn't work
return db.cast(total_room_area, db.Numeric) + db.cast(
total_garden_area, db.Numeric
)
Я основывал свой подход на этом SO-ответе Как суммировать * count * подзапросы с помощью SQLAlchemy? но это приводит к синтаксической ошибке SQL:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "SELECT"
LINE 4: ...6248d-af5c-4c2b-9d39-e030866e2bd7') ORDER BY CAST(SELECT sum...