61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
数据库迁移脚本
|
|||
|
|
"""
|
|||
|
|
import asyncio
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
# 添加项目根目录到路径
|
|||
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|||
|
|
|
|||
|
|
async def main():
|
|||
|
|
from app.core.config import get_settings
|
|||
|
|
from aerich import Command
|
|||
|
|
|
|||
|
|
settings = get_settings()
|
|||
|
|
|
|||
|
|
# Aerich 配置
|
|||
|
|
TORTOISE_ORM = {
|
|||
|
|
"connections": {
|
|||
|
|
"default": settings.database_url
|
|||
|
|
},
|
|||
|
|
"apps": {
|
|||
|
|
"models": {
|
|||
|
|
"models": ["app.models", "aerich.models"],
|
|||
|
|
"default_connection": "default",
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"use_tz": False,
|
|||
|
|
"timezone": "UTC",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
command = Command(tortoise_config=TORTOISE_ORM, app="models")
|
|||
|
|
|
|||
|
|
# 初始化 Aerich(首次运行)
|
|||
|
|
if not os.path.exists("./migrations"):
|
|||
|
|
print("🔧 初始化数据库迁移...")
|
|||
|
|
await command.init()
|
|||
|
|
print("✅ 迁移初始化完成")
|
|||
|
|
|
|||
|
|
# 生成迁移文件
|
|||
|
|
print("📝 生成迁移文件...")
|
|||
|
|
try:
|
|||
|
|
migration_name = sys.argv[1] if len(sys.argv) > 1 else "update"
|
|||
|
|
await command.migrate(name=migration_name)
|
|||
|
|
print(f"✅ 迁移文件生成成功: {migration_name}")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"⚠️ 生成迁移文件失败: {e}")
|
|||
|
|
# 尝试升级
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
# 应用迁移
|
|||
|
|
print("🔄 应用数据库迁移...")
|
|||
|
|
try:
|
|||
|
|
await command.upgrade()
|
|||
|
|
print("✅ 迁移应用成功")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ 迁移应用失败: {e}")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
asyncio.run(main())
|