"""迁移脚本 002:创建角色表 使用方式: python -m insurance.db.migrate_002 或在应用启动时自动执行(需要配置 MIGRATION_ENABLED=true) """ from sqlalchemy import text from insurance.db.compat import db def migrate(): """执行迁移:创建角色表。""" print("[migrate_002] 开始执行迁移...") try: # 检查表是否已存在 result = db.session.execute(text(""" SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_name = 'insurance_roles' ) """)) if result.scalar(): print("[migrate_002] 表已存在,跳过") return True # 创建角色表 print("[migrate_002] 创建 insurance_roles 表") db.session.execute(text(""" CREATE TABLE insurance_roles ( id SERIAL PRIMARY KEY, name VARCHAR(64) UNIQUE NOT NULL, description VARCHAR(256) DEFAULT '', permissions TEXT DEFAULT '[]', builtin BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """)) # 添加注释 db.session.execute(text(""" COMMENT ON TABLE insurance_roles IS '系统角色表' """)) db.session.execute(text(""" COMMENT ON COLUMN insurance_roles.name IS '角色名称' """)) db.session.execute(text(""" COMMENT ON COLUMN insurance_roles.permissions IS '权限列表JSON' """)) db.session.execute(text(""" COMMENT ON COLUMN insurance_roles.builtin IS '是否内置角色' """)) db.session.commit() print("[migrate_002] 迁移完成!") return True except Exception as e: db.session.rollback() print(f"[migrate_002] 迁移失败: {e}") return False if __name__ == "__main__": from flask import Flask from configs.app_config import AppConfig app = Flask(__name__) app.config.from_object(AppConfig) with app.app_context(): migrate()