""" Tortoise-ORM 数据库配置 """ from typing import Optional from tortoise import Tortoise from tortoise.contrib.fastapi import register_tortoise from .config import get_settings async def init_db(): """初始化数据库连接""" settings = get_settings() db_config = { "connections": { "default": settings.database_url }, "apps": { "models": { "models": ["app.models", "aerich.models"], "default_connection": "default", } }, "use_tz": False, "timezone": "UTC", } await Tortoise.init(db_config) # 根据配置决定是否生成表结构 if settings.generate_schemas: print("🗃️ 生成数据库表结构...") await Tortoise.generate_schemas() print("✅ 数据库表结构生成完成") else: print("⏭️ 跳过数据库表结构生成(建议使用迁移工具)") print(f"✅ 数据库连接成功: {settings.database_url}") async def close_db(): """关闭数据库连接""" await Tortoise.close_connections() print("✅ 数据库连接已关闭") def register_db(app): """将数据库注册到 FastAPI 应用""" settings = get_settings() register_tortoise( app, db_url=settings.database_url, modules={"models": ["app.models"]}, generate_schemas=settings.generate_schemas, add_exception_handlers=True, ) return app # 在 app/core/database.py 中添加 from aerich import Command async def run_migrations(): """运行数据库迁移""" try: command = Command( tortoise_config={ "connections": { "default": get_settings().database_url }, "apps": { "models": { "models": ["app.models", "aerich.models"], "default_connection": "default", } }, }, app="models" ) # 检查并应用迁移 await command.init() await command.upgrade() print("✅ 数据库迁移完成") except Exception as e: print(f"⚠️ 数据库迁移失败: {e}")