fix: добавить миграции для всех колонок в cron_jobs

- Добавить проверку и миграции для колонок: prompt, user_id, enabled, notify, log_results, last_run, next_run
- Исправляет ошибку 'no such column: prompt' при запуске со старой БД

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad 2026-02-25 13:41:30 +08:00
parent b748ceefb7
commit 95de7b8d85
1 changed files with 26 additions and 9 deletions

View File

@ -68,8 +68,8 @@ class CronTool(BaseTool):
"""Инициализировать БД.""" """Инициализировать БД."""
conn = sqlite3.connect(self.db_path) conn = sqlite3.connect(self.db_path)
c = conn.cursor() c = conn.cursor()
# Создаём таблицу с user_id # Создаём таблицу со всеми колонками
c.execute(''' c.execute('''
CREATE TABLE IF NOT EXISTS cron_jobs ( CREATE TABLE IF NOT EXISTS cron_jobs (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
@ -85,15 +85,32 @@ class CronTool(BaseTool):
created_at DATETIME DEFAULT CURRENT_TIMESTAMP created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) )
''') ''')
# Проверяем есть ли колонка user_id (для обратной совместимости) # Проверяем наличие всех колонок (для обратной совместимости)
c.execute("PRAGMA table_info(cron_jobs)") c.execute("PRAGMA table_info(cron_jobs)")
columns = [col[1] for col in c.fetchall()] columns = [col[1] for col in c.fetchall()]
if 'user_id' not in columns: # Миграции для старых БД
logger.info("Добавление колонки user_id в таблицу cron_jobs") migrations = {
c.execute('ALTER TABLE cron_jobs ADD COLUMN user_id INTEGER') '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.commit()
conn.close() conn.close()