Задать вопрос
@Masvy

Как подсчитать количество необходимых строк?

У меня есть таблица с пользователями. В одном из столбцов записывается статус регистрации: Зарегистрирован/Не зарегистрирован. Я пытаюсь посчитать количество зарегистрированных.

async def count_registration_status():
    _session_maker: sessionmaker = data['session_maker']
    async with _session_maker() as session:
        async with session.begin():
            result = await session.execute(func.count(User.registration_status).filter(User.registration_status == 'Зарегистрирован'))
            registration_status = result.scalar()
    return registration_status


Эту функцию использую так:
@router.callback_query(F.data == 'statistics_but_pressed')
async def show_stat(callback: CallbackQuery):
    _count_registration_status = await count_registration_status()
    await callback.message.edit_text(text='Статистика проекта:\n\n'
                                     'Сборов: \n\n'
                                     'Пользователей (прошедших '
                                     f'регистрацию):{_count_registration_status}'
                                     '\n\nВне клуба:\nЛайт:\nСтандарт:\n'
                                     'Макс:\nАмбассадоров:\n\nАктивных:\n'
                                     'за неделю:\nза месяц:\n\nСобрано'
                                     ' средств:\nза неделю\nза месяц:',
                                     reply_markup=admin_panel_menu_kb)


Однако получаю следующую ошибку:
sqlalchemy.exc.ArgumentError: Executable SQL or text() construct expected, got .
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Masvy Автор вопроса
Пришёл к решению самостоятельно, вот рабочий код:
async def count_registration_status():
    _session_maker: sessionmaker = data['session_maker']
    async with _session_maker() as session:
        async with session.begin():
            result = await session.execute(select(func.count()).where(User.registration_status == 'Зарегистрирован'))
            registration_status = result.scalar()
    return registration_status
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы