baodan/api/insurance/db/migrate_008.py

74 lines
2.3 KiB
Python
Raw Normal View History

"""迁移脚本:添加 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("迁移完成")