@Olicut

Не правильная проверка ячейки таблицы через цикл, почему не записывается переменная?

Вот сам код
@bot.callback_query_handler(func=lambda call:True)
def callback(call):
    conn = sqlite3.connect('pars.sql')
    cur = conn.cursor()

    cur.execute('SELECT * FROM users')
    users = cur.fetchall()
    info =''
    for el in users:
        if el[3] == call.message.chat.id:  ## из-за проверки переменная info пустая 
            info = f'id{el[0]}.<b>номер телеона:</b> {el[1]} ,<b>Адресс доставки:</b> {el[2]} ,\n <b>Ваш ид:</b> {el[3]}\n'

    cur.close()
    conn.close()
    bot.send_message(call.message.chat.id,info,parse_mode='html')


При отправке сообщения в чат переменной info выдает ошибку о пустом сообщении , что значит что на нее ничего не записано , но при всем при этом если я убираю строку с оператором if ,то он спокойно заполняет переменную и все работает должным образом и при этом я точно знаю что 3'ая ячейка имеет id определенного чата который я пытаюсь найти .

Помогите пожалуйста разобраться с этим вопросом
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Ты уверен? Как насчёт явно задать порядок выборки нужных тебе столбцов в select?
Что-то в духе SELECT id, name, chat_id FROM users. Названия столбцов укажи свои, и только используемые в данном коде.

Далее, с БД так не работают. Ты выбираешь все строки, а потом вручную ищешь совпадение - это глупо.
Лучше попроси БД найти нужные тебе строки.
cur.execute('SELECT id, name FROM users WHERE chat_id = ?', (call.message.chat.id,))


К слову, что ты подразумеваешь с под "третья"? Индекс 3? Или "третья с начала" (индекс 2)?
Ответ написан
Комментировать
@codingoleg
fetchall и fetchone возвращают список кортежей. Поэтому el[3] - это тоже tuple, а не int. Нужное значение внутри должно быть, например, el[3][0].
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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