@ArtemMik
Python

Как сравнить пустое значение из БД?

У меня есть тг бот, в котором есть функция вывода кол-во реферальных партнёров, но не всегда в БД у любого юзера может быть записана наша реферальная ссылка, и если нашей ссылки нету ни у одного юзера, то надо выводить ноль, если есть у кого-то наша ссылка, то считать у скольки пользователей есть наша ссылка:

Код:

@dp.message_handler(text=' Партнёры')
async def all_message(message: types.CallbackQuery):
    ref_active = db.cur.execute('SELECT referal_id FROM users').fetchall()
    for ref_id in ref_active:
        for row in ref_id:
            if row == message.from_user.id: # сравниваем все реферальные ссылки на нашу
                user_name = db.cur.execute('SELECT user_name FROM users WHERE referal_id = ?',
                                     (row,)).fetchall()
                if len(user_name) > 0:
                    us_active = 0 + len(user_name)
                else:
                    us_active = 0
    await bot.send_message(message.chat.id, f"✅ Активированные партнёры: {us_active} чел.\n\n Ваша пртнёрская ссылка: https://t.me/geekinvest_bot?start={message.from_user.id}", reply_markup=partners)


Ошибка:

UnboundLocalError: local variable 'us_active' referenced before assignment
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Учи матчасть. Всё делается одним запросом.
SELECT referal_id, COUNT(*) FROM users GROUP BY referal_id

Группировка сделает так, что для каждого referal_id будет выведена одна строка, а групповые функции посчитают некий итог для каждой группы строк с одним и тем же значением referal_id. В частности, COUNT() посчитает сколько строк в группе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы