Python

Что делать если не работает программа на питоне с базой данных

# Обработчик всех остальных сообщений
@bot.message_handler(func=lambda message: True)
def handle_message(message):
# Проверка, есть ли у пользователя текущее напоминание
cursor.execute("SELECT * FROM reminders WHERE user_id=? AND reminder_date IS NULL", (message.from_user.id,))
reminder = cursor.fetchone()

if reminder is None:
# Если у пользователя нет текущего напоминания, просим его ввести дату/время
bot.send_message(message.chat.id, "Когда тебе нужно напомнить?")
bot.register_next_step_handler(message, handle_date)
else:
# Если у пользователя уже есть дата/время, сохраняем текст напоминания
cursor.execute("UPDATE reminders SET reminder_text=? WHERE id=?", (message.text, reminder[0]))
conn.commit()

# Отправляем сообщение с датой/временем и текстом напоминания
keyboard = types.InlineKeyboardMarkup()
keyboard.row(
types.InlineKeyboardButton("Да, верно", callback_data="confirm"),
types.InlineKeyboardButton("Нет, редактировать дату/время", callback_data="edit_date"),
types.InlineKeyboardButton("Нет, редактировать сообщение", callback_data="edit_message")
)

bot.send_message(message.chat.id, f"Ты хочешь, чтобы я напомнил тебе:\n\n{reminder[4]}\n\n{reminder[3]}",
reply_markup=keyboard)

Где то здесь есть ошибка, когда дело доходит до спроса текста и даты/время после ввода он меня начинает бесконечно одно и тоже спрашивать. а именно когда тебе надо напомнить и текст напоминания, помогите пожалуйста ?
SP
Sergey Pospelov
101
# Обработчик всех остальных сообщений
@bot.message_handler(func=lambda message: True)
def handle_message(message):
# Проверка, есть ли у пользователя текущее напоминание
cursor.execute("SELECT * FROM reminders WHERE user_id=? AND reminder_date IS NULL", (message.from_ user.id ,))
reminder = cursor.fetchone()

if reminder is None:
# Если у пользователя нет текущего напоминания, просим его ввести дату/время
bot.send_message(message.chat.id, "Когда тебе нужно напомнить?")
bot.register_next_step_handler(message, handle_date)
else:
# Если у пользователя уже есть дата/время, сохраняем текст напоминания
cursor.execute("UPDATE reminders SET reminder_text=? WHERE id=?", (message.text, reminder[0]))
conn.commit()

# Отправляем сообщение с датой/временем и текстом напоминания
keyboard = types.InlineKeyboardMarkup()
keyboard.row(
types.InlineKeyboardButton("Да, верно", callback_data="confirm"),
types.InlineKeyboardButton("Нет, редактировать дату/время", callback_data="edit_date"),
types.InlineKeyboardButton("Нет, редактировать сообщение", callback_data="edit_message")
)

bot.send_message(message.chat.id, f"Ты хочешь, чтобы я напомнил тебе:\n\n{reminder[4]}\n\n{reminder[3]}",
reply_markup=keyboard)

# Обработчик для получения даты/времени
def handle_date(message):
# Здесь вы можете добавить логику для обработки введенной даты/времени
pass
ЕН
Ерлан Нурдавлетов
496
Лучший ответ
Sergey Pospelov Всё равно точно так же, может дело в базе данных?
Я использую SqLiteStudio, у меня юзер айди и т.д в SqLiteStudio не отображается во вкладке данные
Не вижу нигде никакого добавления в бд. Только обновление существующих ячеек
Akjol Abdikadir
Akjol Abdikadir
34 941
Sergey Pospelov А как это можно сделать?
Akjol Abdikadir Он именно просто так начинает по кругу спрашивать, или пишет, что неправильный формат даты?
Akjol Abdikadir Проверь, что бот на свои же сообщения не реагирует случайно
не могу увидеть всю структуру вашего кода и не знаю, какие переменные у вас определены ранее
думаю, ошибка мб разная.
исходя из фрагментов кода, я заметил несколько вещей:
  • у вас используется база данных, но вы не показали код связанный с созданием подключения и курсора. убедитесь, что вы правильно подключили базу данных и создали курсор для выполнения запросов.
  • ваш обработчик сообщений вызывает функцию `handle_date`, когда пользователь вводит дату/время. вы не предоставили эту функцию в предоставленном коде. убедитесь, что у вас есть отдельная функция для обработки ввода даты/времени пользователя.
  • используете `bot.register_next_step_handler(message, handle_date)` для регистрации следующего обработчика. убедитесь что правильно реализовали функцию `handle_date` и что она завершает свою работу (не выходит из цикла ожидания новых сообщений), чтобы не вызывать повторный вызов того же обработчика.
  • условие `func=lambda message: True` в обработчике сообщений. это условие означает, что обработчик будет вызываться для всех сообщений, включая ответы пользователя. можете добавить дополнительные условия, чтобы указать, в какой ситуации вызывать обработчик для сообщений.

внимательно просмотрите свой код и прежде всего проверьте основные проблемы
Den Рыбаков https://qna.habr.com/q/1290652 Здесь полный ко посмотрите пожалуйста(