Sqlalchemy для запроса по списку элементов (включая дубликаты) - PullRequest
1 голос
/ 05 мая 2020

У меня есть запрос, который я пытаюсь решить, и в нем всего одна проблема, которую мне трудно решить.

Запрос sqlalchemy (python) выглядит следующим образом:

def get_count(apple_ids: List[int]):
    q = (
        db.session()
        .query(
            func.sum(case([(Apple.is_green, 1)], else_=0)).label("green_count"),
            func.sum(case([(Apple.is_grouped, 5)], else_=1)).label("group_count"),
        )
        .filter(Apple.id.in_(apple_ids))
    )

    return q.one()

Проблема возникает, если в моем списке apple_ids есть дубликаты, то есть [10, 10]. В этом случае сумма выполняется только один раз для Apple с идентификатором 10. Но мне нужно, чтобы суммировать дважды, так как она находится в списке дважды.

Результат запроса на этом этапе (если Apple.is_green и Apple.is_grouped имеет значение True): green_count = 1, group_count = 5. Однако мне нужно, чтобы это было green_count = 2, group_count = 10.

Любая помощь приветствуется. Спасибо!

...