68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
import sys
|
||
import os
|
||
from app import create_app, db
|
||
from flask_migrate import upgrade, migrate, init, stamp
|
||
|
||
def init_migrations():
|
||
"""初始化迁移环境 (如果 migrations 文件夹不存在)"""
|
||
if not os.path.exists('migrations'):
|
||
print("📂 初始化 migrations 文件夹...")
|
||
with app.app_context():
|
||
init()
|
||
else:
|
||
print("✅ migrations 文件夹已存在,跳过初始化。")
|
||
|
||
def make_migrations(message="Auto update"):
|
||
"""生成迁移脚本 (检测 models.py 的变动)"""
|
||
print(f"📝 正在生成迁移脚本 (备注: {message})...")
|
||
with app.app_context():
|
||
try:
|
||
migrate(message=message)
|
||
print("✅ 迁移脚本生成成功!")
|
||
except Exception as e:
|
||
print(f"⚠️ 生成失败 (可能是没有变动): {e}")
|
||
|
||
def apply_migrations():
|
||
"""应用迁移到数据库 (执行 SQL)"""
|
||
print("🚀 正在将变动应用到数据库...")
|
||
with app.app_context():
|
||
upgrade()
|
||
print("✅ 数据库结构已同步至最新版!")
|
||
|
||
def force_sync():
|
||
"""强制同步 (不仅是 Upgrade,还包括 create_all)"""
|
||
print("🔧 正在进行全量同步检查...")
|
||
with app.app_context():
|
||
db.create_all()
|
||
# 标记当前状态为最新
|
||
stamp()
|
||
print("✅ 数据库表结构已确保存在。")
|
||
|
||
if __name__ == '__main__':
|
||
app = create_app()
|
||
|
||
if len(sys.argv) < 2:
|
||
print("\n🔧 数据库管理脚本使用说明:")
|
||
print(" python db_manager.py init -> 初始化迁移环境")
|
||
print(" python db_manager.py make -> 生成迁移文件 (检测 models.py 变动)")
|
||
print(" python db_manager.py up -> 执行更新 (修改数据库表结构)")
|
||
print(" python db_manager.py sync -> 一键同步模式 (生成 + 执行)")
|
||
sys.exit(0)
|
||
|
||
cmd = sys.argv[1]
|
||
|
||
if cmd == 'init':
|
||
init_migrations()
|
||
elif cmd == 'make':
|
||
msg = sys.argv[2] if len(sys.argv) > 2 else "schema_update"
|
||
make_migrations(msg)
|
||
elif cmd == 'up':
|
||
apply_migrations()
|
||
elif cmd == 'sync':
|
||
# 一键傻瓜模式
|
||
init_migrations()
|
||
make_migrations("auto_sync")
|
||
apply_migrations()
|
||
else:
|
||
print("❌ 未知命令")
|