#!/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()