@TKDBOT
Учу python. Готов к конструктивной критике.

Как передать значение res[0] в следующий шаг step_2 для создания SQL запроса?

Вот пример строки из БД:
ID - "155" street - "Гагарина" house - "36/3" komm - "Фасадный дом" street_str - "гагарина"

При вводе адреса мне нужно вытащить ID записи и во втором шаге составить запрос к SQLite. Но мне вместо ID возвращается изначально введенный адрес
Запрос: "Гагарина 36/3" =>
Step_2: "Введите комментарий"
Записать комментарий в переменную temp
Комментарий: "Комментарий"
Запрос к БД: "По ID записи объединить старый комментарий и новый"

Но пока на step_2 программа не переходи и не выводит ошибки.

@bot.message_handler(commands=['add'])
def handle_text (message):
    bot.send_message(message.chat.id, f"{message.from_user.first_name}, введите адрес")
    @bot.message_handler(content_types=['text'])
    def handle_text(message):
        db = sqlite3.connect('db.sqlite')
        cursor = db.cursor()
        txt = message.text
        zap = txt.rsplit(' ', 1)
        street = zap[0]
        house = zap[1]
        street_str = zap[0].lower()
        cursor.execute("SELECT * FROM tkd WHERE street_str LIKE '%' || ? || '%' AND  house = ?", (street_str, house))
        res = cursor.fetchone()
        if res:
            res[0]
            res[3]
        else:
            bot.send_message(message.chat.id, 'Проверьте адрес')
        bot.register_next_step_handler(message, step_2)


def step_2(message):
    id = res[0]
    temp_komm = res[3]
    bot.send_message(message.chat.id, 'Введите комментарий')
    new_komm = message.txt
    db = sqlite3.connect('db.sqlite')
    cursor = db.cursor()
    cursor.execute(f"UPDATE tkd SET komm = {temp_komm}\n{new_komm} WHERE id == {id}")
    cursor.close()
    db.commit()
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@twistfire92
Python backend developer
Выносите хендлер из функции.
Если вы хотите через register_next_step_handler передать параметры какие-либо, передавайте их третьим и далее параметром. Пример можете посмотреть в ответах тут.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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