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()
|