Как получить сумму двух запросов в выражении hybrid_property в SQLAlchemy? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь написать гибридное свойство 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...
...