baodan/api/insurance/db/migrate_002.py

77 lines
2.2 KiB
Python
Raw Normal View History

"""迁移脚本 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()