Files
tsp-assistant/fix_database_schema.py
2025-09-08 15:27:22 +08:00

91 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()