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

@ -69,7 +69,7 @@ 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,
@ -86,13 +86,30 @@ class CronTool(BaseTool):
)
''')
# Проверяем есть ли колонка 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()