fix: rename upgrade() to migrate() in migrate_017 so it runs automatically

The migration runner (db/__init__.py) calls module.migrate() with no
arguments, but migrate_017 defined upgrade(engine). This meant the
slides_config_json column was never added to insurance_ppt_templates
in production, causing a 500 on /insurance/ppt/render-options.
This commit is contained in:
wsb1224 2026-07-25 08:47:35 +08:00
parent 63c7e87ea7
commit 8e897276e7

View File

@ -10,30 +10,32 @@ from sqlalchemy import text
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def upgrade(engine): def migrate():
"""执行迁移。""" """执行迁移。"""
with engine.begin() as conn: from insurance.db.compat import db
# 检查列是否已存在
result = conn.execute(text(
"SELECT COUNT(*) FROM information_schema.columns "
"WHERE table_name = 'insurance_ppt_templates' AND column_name = 'slides_config_json'"
))
if result.scalar() > 0:
logger.info("slides_config_json 列已存在,跳过迁移")
return
conn.execute(text( # 检查列是否已存在
"ALTER TABLE insurance_ppt_templates ADD COLUMN slides_config_json TEXT" result = db.session.execute(text(
)) "SELECT COUNT(*) FROM information_schema.columns "
logger.info("已添加 slides_config_json 列") "WHERE table_name = 'insurance_ppt_templates' AND column_name = 'slides_config_json'"
))
if result.scalar() > 0:
logger.info("slides_config_json 列已存在,跳过迁移")
return
# 为现有模板填充默认 slides_config db.session.execute(text(
_seed_default_slides_config(conn) "ALTER TABLE insurance_ppt_templates ADD COLUMN slides_config_json TEXT"
))
db.session.commit()
logger.info("已添加 slides_config_json 列")
# 为现有模板填充默认 slides_config
_seed_default_slides_config(db)
def _seed_default_slides_config(conn): def _seed_default_slides_config(db):
"""为现有模板填充默认的逐页配置。""" """为现有模板填充默认的逐页配置。"""
templates = conn.execute(text( templates = db.session.execute(text(
"SELECT id, plan_type, required_page_types_json FROM insurance_ppt_templates WHERE status = 1" "SELECT id, plan_type, required_page_types_json FROM insurance_ppt_templates WHERE status = 1"
)).fetchall() )).fetchall()
@ -48,10 +50,11 @@ def _seed_default_slides_config(conn):
continue continue
slides_config = _build_default_slides_config(page_types, plan_type) slides_config = _build_default_slides_config(page_types, plan_type)
conn.execute(text( db.session.execute(text(
"UPDATE insurance_ppt_templates SET slides_config_json = :config WHERE id = :id" "UPDATE insurance_ppt_templates SET slides_config_json = :config WHERE id = :id"
), {"config": json.dumps(slides_config, ensure_ascii=False), "id": tpl_id}) ), {"config": json.dumps(slides_config, ensure_ascii=False), "id": tpl_id})
db.session.commit()
logger.info(f"已为 {len(templates)} 个模板填充默认 slides_config") logger.info(f"已为 {len(templates)} 个模板填充默认 slides_config")