Flask: как из БД с помощью SQLAlchemy вытащить записи для некоторых переменных одним запросом?

Мне нужно вытащить данные для нескольких переменных во Flask с помощью SQLAlchemy. Можно ли сделать это одним запросом, чтобы меньше грузить данные?

Я хочу воспользоваться чем-то таким:

from sqlalchemy import func
a = session.query(Table.column1, func.count(Table.column1)).group_by(Table.column1).all()
b = session.query(Table.column2, func.count(Table.column2)).group_by(Table.column2).all()
c = session.query(Table.column3, func.count(Table.column3)).group_by(Table.column3).all()

Но не хочу делать три запроса в БД, а попробовать вытащить эти три значения одним запросом, но разложить потом в три переменные.

Это возможно?


Ответы (1 шт):

Автор решения: Akina

В терминах SQL эти запросы выглядят как

SELECT columnN, COUNT(columnN)
FROM table
GROUP BY columnN

Соответственно для каждого из 3 полей в получаемом наборе будет в общем случае различное количество записей. А, значит, объединение по горизонтали - исключено.

Остаётся объединение по вертикали:

SELECT 1 AS column_number, column1 AS column_value, COUNT(column1) AS values_amount
FROM table
GROUP BY column1
UNION ALL
SELECT 2 AS column_number, column2, COUNT(column2)
FROM table
GROUP BY column2
UNION ALL
SELECT 1 AS column_number, column3, COUNT(column3)
FROM table
GROUP BY column3;

Превращать это обратно в SQLAlchemy - это уж как-нить без меня...

→ Ссылка