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:
parent
b748ceefb7
commit
95de7b8d85
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue