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