@enabl3

Как получить данные SQL запроса?

Всем привет.
Подскажите пожалуйста, что я делаю не правильно?
Есть файл requests.sql, в нем пишу все запросы, в нем есть запрос на получение всех айдишников юзеров, выглядит так:
def users_in_db(message):
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    sql_users_in_db = """SELECT chat_id FROM users;"""
    cursor.execute(sql_users_in_db)
    users = cursor.fetchall()
    print(users)
    conn.close()

теперь в коммандах, файле handlers.py, хочу проверить есть ли юзер, написавший сообщение в бд
@dp.message_handler(commands=["users"])
async def process_start_command(message: Message):
    if str(message.chat.id) in str(users_in_db(message)):
        print("зареган")
    else:
        print("не зареган")

ответ в консоль приходит - список айдишников юзеров + не зареган. Если в коде напишу print(str(users_in_db(message))) и запущу, то в консоле будет список айдишников в базе + None.
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
Ваша функция ничего не возвращает, поэтому и выводится всегда "не зареган".
Если у функции нет return, то результатом ее выполнения будет None

В итоге, if разворачивается в str(message.chat.id) in 'None', что всегда False, если только message.chat.id != 'None' или любому срезу строки.

Используйте контекстный менеджер with, так не придется закрывать курсор или подключение к БД вручную.
Возвращайте результат из функции, чтобы было с чем работать после того, как она выполнится.

Почитайте любой самоучитель по Python. Например, Лутца. Это отбросит множество таких вопросов и здорово поможет в изучении языка
def users_in_db(message):
    with sqlite3.connect(db) as conn:
        with conn.cursor() as cursor:
            sql_users_in_db = """SELECT chat_id FROM users WHERE chat_id = ?;"""
            cursor.execute(sql_users_in_db, message.chat.id)
            users = cursor.fetchall()
            print(users)
            if users:
                return True
    return False


@dp.message_handler(commands=["users"])
async def process_start_command(message: Message):
    if users_in_db(message):
        print("зареган")
    else:
        print("не зареган")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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