From 95de7b8d855d487d5aff55ba0d6c618b6ee81a8c Mon Sep 17 00:00:00 2001 From: mirivlad Date: Wed, 25 Feb 2026 13:41:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BC=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=BE=D0=BA=20=D0=B2=20cron=5Fjobs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавить проверку и миграции для колонок: prompt, user_id, enabled, notify, log_results, last_run, next_run - Исправляет ошибку 'no such column: prompt' при запуске со старой БД Co-authored-by: Qwen-Coder --- bot/tools/cron_tool.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/bot/tools/cron_tool.py b/bot/tools/cron_tool.py index 97d9939..1d1edfd 100644 --- a/bot/tools/cron_tool.py +++ b/bot/tools/cron_tool.py @@ -68,8 +68,8 @@ class CronTool(BaseTool): """Инициализировать БД.""" conn = sqlite3.connect(self.db_path) c = conn.cursor() - - # Создаём таблицу с user_id + + # Создаём таблицу со всеми колонками c.execute(''' CREATE TABLE IF NOT EXISTS cron_jobs ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -85,15 +85,32 @@ class CronTool(BaseTool): created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ''') - - # Проверяем есть ли колонка user_id (для обратной совместимости) + + # Проверяем наличие всех колонок (для обратной совместимости) c.execute("PRAGMA table_info(cron_jobs)") columns = [col[1] for col in c.fetchall()] - - if 'user_id' not in columns: - logger.info("Добавление колонки user_id в таблицу cron_jobs") - c.execute('ALTER TABLE cron_jobs ADD COLUMN user_id INTEGER') - + + # Миграции для старых БД + migrations = { + 'prompt': 'ALTER TABLE cron_jobs ADD COLUMN prompt TEXT DEFAULT ""', + 'user_id': 'ALTER TABLE cron_jobs ADD COLUMN user_id INTEGER', + 'enabled': 'ALTER TABLE cron_jobs ADD COLUMN enabled INTEGER DEFAULT 1', + 'notify': 'ALTER TABLE cron_jobs ADD COLUMN notify INTEGER DEFAULT 0', + 'log_results': 'ALTER TABLE cron_jobs ADD COLUMN log_results INTEGER DEFAULT 1', + 'last_run': 'ALTER TABLE cron_jobs ADD COLUMN last_run DATETIME', + 'next_run': 'ALTER TABLE cron_jobs ADD COLUMN next_run DATETIME' + } + + for col_name, alter_query in migrations.items(): + if col_name not in columns: + logger.info(f"Добавление колонки {col_name} в таблицу cron_jobs") + try: + c.execute(alter_query) + except sqlite3.OperationalError as e: + # Игнорируем ошибку если колонка уже существует (race condition) + if "duplicate column" not in str(e).lower(): + raise + conn.commit() conn.close()