修改说明
This commit is contained in:
90
fix_database_schema.py
Normal file
90
fix_database_schema.py
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user