"""迁移脚本:添加 baodan_conversation_id 字段到会话表。""" import logging from insurance.db.compat import db def migrate(): """添加 baodan_conversation_id 字段到 insurance_chat_sessions 表。""" try: from sqlalchemy import inspect # 检查字段是否已存在 inspector = inspect(db.engine) columns = [col['name'] for col in inspector.get_columns('insurance_chat_sessions')] if 'baodan_conversation_id' in columns: logging.info("字段 baodan_conversation_id 已存在,跳过添加") return # 根据数据库方言执行不同的 SQL dialect = db.engine.dialect.name if dialect == 'sqlite': # SQLite 不支持 COMMENT 语法 db.session.execute( "ALTER TABLE insurance_chat_sessions " "ADD COLUMN baodan_conversation_id VARCHAR(128)" ) else: # PostgreSQL db.session.execute( "ALTER TABLE insurance_chat_sessions " "ADD COLUMN baodan_conversation_id VARCHAR(128) NULL " "COMMENT 'BaoDan 返回的 conversation_id,用于保持上下文'" ) db.session.commit() logging.info("成功添加 baodan_conversation_id 字段") except Exception as e: logging.error(f"添加字段失败: {e}") db.session.rollback() raise def downgrade(): """删除 baodan_conversation_id 字段。""" try: from sqlalchemy import inspect inspector = inspect(db.engine) columns = [col['name'] for col in inspector.get_columns('insurance_chat_sessions')] if 'baodan_conversation_id' not in columns: logging.info("字段 baodan_conversation_id 不存在,跳过删除") return db.session.execute( "ALTER TABLE insurance_chat_sessions DROP COLUMN baodan_conversation_id" ) db.session.commit() logging.info("成功删除 baodan_conversation_id 字段") except Exception as e: logging.error(f"删除字段失败: {e}") db.session.rollback() raise if __name__ == "__main__": # 直接运行迁移 import sys sys.path.insert(0, ".") from app import app with app.app_context(): migrate() print("迁移完成")