Функция группировки и подсчета в sqlalchemy

Ответы:

169

В документации по подсчету написано, что для group_byзапросов лучше использовать func.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
миниварк
источник
16
а вот полное заявление для тех, кто использует Table.queryсобственность вместо session.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Якуб Кукул,
2
@jkukul Это должен быть ответ сам по себе - мне всегда было интересно, как обойти это ограничение при выполнении подзапросов, и я хотел использовать group_by и count ..!
chris-sc
1
Изменения в этом ответе делают первое предложение бессмысленным. "Лучше" чем что ?
Марк Эмери
35

Если вы используете Table.queryнедвижимость:

from sqlalchemy import func
Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()

Если вы используете session.query()метод (как указано в ответе miniwark):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()
Якуб Кукул
источник
+ один для с сущностями
Эспоар Мурхабази
28

Вы также можете рассчитывать на несколько групп и их пересечение:

self.session.query(func.count(Table.column1),Table.column1, Table.column2).group_by(Table.column1, Table.column2).all()

Приведенный выше запрос вернет количество всех возможных комбинаций значений из обоих столбцов.

fccoelho
источник
Спасибо за вопрос. Размышляя над ним, я нашел ответ на свой вопрос. ;-)
fccoelho