91 lines
3.8 KiB
Python
91 lines
3.8 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
数据库架构修复脚本
|
|||
|
|
添加缺失的字段和修复表结构
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
from sqlalchemy import text
|
|||
|
|
|
|||
|
|
# 添加项目根目录到Python路径
|
|||
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|||
|
|
|
|||
|
|
from src.core.database import db_manager
|
|||
|
|
from src.core.models import Base
|
|||
|
|
import logging
|
|||
|
|
|
|||
|
|
logging.basicConfig(level=logging.INFO)
|
|||
|
|
logger = logging.getLogger(__name__)
|
|||
|
|
|
|||
|
|
def fix_database_schema():
|
|||
|
|
"""修复数据库架构"""
|
|||
|
|
try:
|
|||
|
|
with db_manager.get_session() as session:
|
|||
|
|
# 检查并添加severity字段到alerts表
|
|||
|
|
try:
|
|||
|
|
# 检查字段是否存在
|
|||
|
|
result = session.execute(text("""
|
|||
|
|
SELECT COUNT(*) as count
|
|||
|
|
FROM information_schema.columns
|
|||
|
|
WHERE table_name = 'alerts' AND column_name = 'severity'
|
|||
|
|
"""))
|
|||
|
|
|
|||
|
|
if result.fetchone()[0] == 0:
|
|||
|
|
logger.info("添加severity字段到alerts表...")
|
|||
|
|
session.execute(text("ALTER TABLE alerts ADD COLUMN severity VARCHAR(20) DEFAULT 'medium'"))
|
|||
|
|
session.commit()
|
|||
|
|
logger.info("severity字段添加成功")
|
|||
|
|
else:
|
|||
|
|
logger.info("severity字段已存在")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.warning(f"添加severity字段失败: {e}")
|
|||
|
|
# 如果是SQLite,尝试不同的方法
|
|||
|
|
try:
|
|||
|
|
session.execute(text("ALTER TABLE alerts ADD COLUMN severity VARCHAR(20) DEFAULT 'medium'"))
|
|||
|
|
session.commit()
|
|||
|
|
logger.info("severity字段添加成功(SQLite)")
|
|||
|
|
except Exception as e2:
|
|||
|
|
logger.error(f"SQLite添加severity字段也失败: {e2}")
|
|||
|
|
|
|||
|
|
# 检查并添加is_verified相关字段到knowledge_entries表
|
|||
|
|
try:
|
|||
|
|
result = session.execute(text("""
|
|||
|
|
SELECT COUNT(*) as count
|
|||
|
|
FROM information_schema.columns
|
|||
|
|
WHERE table_name = 'knowledge_entries' AND column_name = 'is_verified'
|
|||
|
|
"""))
|
|||
|
|
|
|||
|
|
if result.fetchone()[0] == 0:
|
|||
|
|
logger.info("添加is_verified字段到knowledge_entries表...")
|
|||
|
|
session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN is_verified BOOLEAN DEFAULT FALSE"))
|
|||
|
|
session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_by VARCHAR(100)"))
|
|||
|
|
session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_at DATETIME"))
|
|||
|
|
session.commit()
|
|||
|
|
logger.info("is_verified相关字段添加成功")
|
|||
|
|
else:
|
|||
|
|
logger.info("is_verified字段已存在")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.warning(f"添加is_verified字段失败: {e}")
|
|||
|
|
# SQLite方法
|
|||
|
|
try:
|
|||
|
|
session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN is_verified BOOLEAN DEFAULT FALSE"))
|
|||
|
|
session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_by VARCHAR(100)"))
|
|||
|
|
session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_at DATETIME"))
|
|||
|
|
session.commit()
|
|||
|
|
logger.info("is_verified相关字段添加成功(SQLite)")
|
|||
|
|
except Exception as e2:
|
|||
|
|
logger.error(f"SQLite添加is_verified字段也失败: {e2}")
|
|||
|
|
|
|||
|
|
logger.info("数据库架构修复完成")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.error(f"数据库架构修复失败: {e}")
|
|||
|
|
raise
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
fix_database_schema()
|