Add File
This commit is contained in:
98
server/migrate_alerts.py
Normal file
98
server/migrate_alerts.py
Normal file
@@ -0,0 +1,98 @@
|
||||
"""
|
||||
数据库迁移脚本 - 升级 family_alerts 表结构
|
||||
"""
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
DB_PATH = os.path.join(os.path.dirname(__file__), 'kinecho.db')
|
||||
|
||||
def migrate():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
# 检查表是否存在
|
||||
cursor.execute('''
|
||||
SELECT name FROM sqlite_master
|
||||
WHERE type='table' AND name='family_alerts'
|
||||
''')
|
||||
|
||||
if cursor.fetchone():
|
||||
print("表 family_alerts 已存在,开始迁移...")
|
||||
|
||||
# 重命名旧表
|
||||
cursor.execute('ALTER TABLE family_alerts RENAME TO family_alerts_old')
|
||||
|
||||
# 创建新表
|
||||
cursor.execute('''
|
||||
CREATE TABLE family_alerts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
family_id TEXT NOT NULL,
|
||||
elderly_id INTEGER,
|
||||
alert_type TEXT NOT NULL,
|
||||
level TEXT NOT NULL,
|
||||
title TEXT,
|
||||
message TEXT NOT NULL,
|
||||
metadata TEXT,
|
||||
source TEXT DEFAULT 'elderly',
|
||||
handled INTEGER DEFAULT 0,
|
||||
handled_at TIMESTAMP,
|
||||
handled_by INTEGER,
|
||||
reply_message TEXT,
|
||||
read INTEGER DEFAULT 0,
|
||||
read_at TIMESTAMP,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (elderly_id) REFERENCES users(id),
|
||||
FOREIGN KEY (handled_by) REFERENCES users(id)
|
||||
)
|
||||
''')
|
||||
|
||||
# 复制旧数据
|
||||
cursor.execute('''
|
||||
INSERT INTO family_alerts
|
||||
(id, family_id, alert_type, level, message, handled, handled_at, created_at, updated_at)
|
||||
SELECT id, family_id, alert_type, level, message, handled, handled_at, created_at, updated_at
|
||||
FROM family_alerts_old
|
||||
''')
|
||||
|
||||
# 删除旧表
|
||||
cursor.execute('DROP TABLE family_alerts_old')
|
||||
|
||||
print("数据迁移完成!")
|
||||
else:
|
||||
print("表不存在,将在初始化时创建")
|
||||
|
||||
# 创建索引
|
||||
cursor.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_family_alerts_family_id
|
||||
ON family_alerts(family_id)
|
||||
''')
|
||||
|
||||
cursor.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_family_alerts_created_at
|
||||
ON family_alerts(created_at DESC)
|
||||
''')
|
||||
|
||||
cursor.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_family_alerts_handled
|
||||
ON family_alerts(handled, created_at DESC)
|
||||
''')
|
||||
|
||||
print("索引创建完成!")
|
||||
|
||||
conn.commit()
|
||||
print("\n✅ 迁移成功!")
|
||||
|
||||
except Exception as e:
|
||||
conn.rollback()
|
||||
print(f"\n❌ 迁移失败: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
migrate()
|
||||
Reference in New Issue
Block a user