SQLAlchemy - переопределить orm.Query.count для базы данных без подвыбора

Я использую sqlalchemy с базой данных, которая не поддерживает подвыборы. Это означает, что что-то подобное не будет работать (где Calendar модель, наследующая декларативную базу):

 Calendar.query.filter(uuid=uuid).count()

Я пытаюсь переопределить count метод с чем-то вроде этого:

def count(self):
    col = func.count(literal_column("'uuid'"))
    return self.from_self(col).scalar()

Тем не менее from_self немного по-прежнему делает отбор. Я не могу сделать что-то вроде этого:

session.query(sql.func.count(Calendar.uuid)).scalar()

Потому что я хочу всю информацию фильтра из Query, Есть ли способ получить аргументы фильтра для текущего Query не делая подвыбор?

Благодаря ~

1 ответ

Из документации по SQLAlchemy:

Для точного контроля над определенными столбцами для подсчета, чтобы пропустить использование подзапроса или иным образом управления предложением FROM или использовать другие агрегатные функции, используйте выражения func вместе с query(), то есть:

from sqlalchemy import func

# count User records, without
# using a subquery.
session.query(func.count(User.id))

# return count of user "id" grouped
# by "name"
session.query(func.count(User.id)).\
        group_by(User.name)

from sqlalchemy import distinct

# count distinct "name" values
session.query(func.count(distinct(User.name)))

Источник: SQLAlchemy (sqlalchemy.orm.query.Query.count)

Другие вопросы по тегам