FastApi结合Tortoise ORM与aerich时出现“No DB associated to model”问题的解决求助
解决Tortoise ORM的"No DB associated to model"异常
这个问题我之前也碰到过,核心原因是你提前手动调用了Tortoise.init_models,导致模型在数据库连接还没初始化完成时就被加载,无法和数据库实例绑定,最终触发了ConfigurationError。
问题分析
你的main.py里先执行了:
Tortoise.init_models(settings.TORTOISE_MODELS_LIST, "models")
但此时register_tortoise还没运行,Tortoise ORM还没有完成数据库连接的初始化和上下文绑定。而register_tortoise本身就会自动处理模型的初始化工作,你额外调用的init_models反而会让模型在无数据库上下文的状态下被注册,导致后续查询时找不到关联的DB。
解决方案
只需要移除多余的Tortoise.init_models调用即可,让register_tortoise来负责完整的ORM初始化流程。
修改后的main.py代码:
app = FastAPI() # 移除这一行:Tortoise.init_models(settings.TORTOISE_MODELS_LIST, "models") register_tortoise( app, config=settings.TORTOISE_ORM, generate_schemas=True, add_exception_handlers=True, ) app.include_router(purchases.router.router) if __name__ == "__main__": uvicorn.run("main:app", debug=True, reload=True, lifespan='on')
额外验证要点
- 确认你的
settings.py里的TORTOISE_MODELS_LIST已经正确包含了所有需要的模型(你已经加了"purchases.models"和"aerich.models",这部分没问题) - 确保aerich的迁移已经完全执行:运行
aerich upgrade确认所有迁移脚本都应用到了数据库 - 重启服务后测试接口,此时模型会在
register_tortoise初始化过程中正确绑定到数据库连接,查询操作就能正常执行了
内容的提问来源于stack exchange,提问作者ftelnov
相关产品推荐
相关产品推荐

