Проблема с созданием scheduled задач после сохранения данных в БД
После успешного внесения всех данных в базу данных возникла проблема с созданием scheduled задач. Терминал не выводит никаких сообщений об успешном добавлении задачи, что затрудняет диагностику проблемы.
Текущая реализация функций
Основные функции для работы с базой данных и создания scheduled задач находятся в функции save_user_to_db. В эту функцию передаются данные из StatesGroup.
async def print_scheduled_text(msg: str):
print(f"\n\nНапоминание: {msg}")
async def save_user_to_db(us_id, name, msg, datetimeuser):
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, us_id INTEGER, name TEXT, msg TEXT, datetimeuser TEXT)")
cursor.execute("INSERT INTO users (us_id, name, msg, datetimeuser) VALUES (?, ?, ?, ?)", (us_id, name, msg, datetimeuser))
if isinstance(datetimeuser, str):
run_date = datetime.strptime(datetimeuser, "%d.%m.%Y %H:%M")
else:
run_date = datetimeuser
scheduler.add_job(print_scheduled_text, 'date', run_date=run_date, args=[us_id, msg], id=f"job_{us_id}")
print(f"Запланировано: '{msg}' на {datetimeuser}")
conn.commit()
conn.close()Обработчик данных пользователя
Обработчик принимает данные от пользователя, сохраняет их и передает в функцию save_user_to_db:
@dp.message_created(Form.datetimeuser)
async def get_datatime(event: MessageCallback, context: MemoryContext):
try:
age = event.message.body.text
age = datetime.strptime(age, "%d.%m.%Y %H:%M")
today = datetime.now()
if age < today:
await event.message.answer('Вы ввели прошедшую дату. Пожалуйста, введите настоящую или будущую дату.', attachments=[btnall.btntask.as_markup()])
else:
await context.update_data(datetimeuser=age)
user_data = await context.get_data()
await event.message.answer(f"Задача успешно создана!", attachments=[btnall.btntask.as_markup()])
await save_user_to_db(user_data['us_id'], user_data['name'], user_data['msg'], user_data['datetimeuser'])
await context.clear() # Завершаем состояние
except ValueError:
await event.message.answer("Ошибка: Неверный формат даты и времени. Пожалуйста, используйте формат DD.MM.YYYY HH:MM")Ключевой вопрос
Возникает закономерный вопрос: правильно ли размещать создание scheduled задач в обработчике message_created? С одной стороны, задача должна создаваться не из состояний, а на основе данных из базы данных. Именно поэтому была предпринята попытка разместить эту логику в функции, которая отвечает за подключение и запись в БД.
Что может быть не так в текущей реализации? Буду благодарен за конструктивные советы без излишней критики.