FastAPI+Tortoise ORM用pydantic_model_creator遇KeyError:'__module__'求助
解决Tortoise ORM中pydantic_model_creator触发KeyError:'module'的问题
以下是针对该错误的具体排查和解决思路:
1. 延迟Pydantic模型生成时机,确保Tortoise初始化完成
如果在Tortoise.init()或register_tortoise完成前就调用pydantic_model_creator,Tortoise还未完成模型元数据的加载,会导致找不到__module__属性。
- 把模型生成代码放在FastAPI的
startup事件回调里,或者在路由模块中延迟导入:# main.py from fastapi import FastAPI from tortoise.contrib.fastapi import register_tortoise from models import User from tortoise.contrib.pydantic import pydantic_model_creator app = FastAPI() User_Pydantic = None @app.on_event("startup") async def init_tortoise_and_models(): await register_tortoise( app, db_url="sqlite:///test.db", modules={"models": ["models"]}, generate_schemas=True, ) # 初始化完成后再生成Pydantic模型 global User_Pydantic User_Pydantic = pydantic_model_creator(User)
2. 规范模型类定义
确保你的Tortoise模型类符合标准写法:
- 必须正确继承
tortoise.models.Model - 建议显式定义
Meta类(至少指定表名) - 示例正确的模型:
# models.py from tortoise.models import Model from tortoise import fields class User(Model): id = fields.IntField(pk=True) username = fields.CharField(max_length=50, unique=True) class Meta: table = "users"
3. 验证依赖版本兼容性
版本不兼容是常见诱因,尤其是Pydantic V2和旧版Tortoise的组合:
- 推荐使用兼容版本组合:
- Tortoise ORM >= 0.20.0(适配Pydantic V2)
- Pydantic >= 2.0.0 或 <2.0(根据Tortoise版本选择)
- FastAPI >= 0.95.0
- 执行
pip list确认当前版本,若不匹配则重新安装:pip install tortoise-orm==0.20.1 pydantic==2.5.2 fastapi==0.104.1
4. 检查模块配置与导入路径
确保模型模块被正确加载:
- 在
register_tortoise的modules参数中,准确指定模型所在的模块名(比如模型在app/models.py,则写modules={"models": ["app.models"]}) - 避免使用相对导入,改用绝对导入方式引入模型类
- 确保项目目录符合Python包规范,根目录建议保留
__init__.py
5. 从报错堆栈定位具体问题
如果以上步骤无效,仔细查看报错的Traceback信息:
- 找到触发KeyError的具体代码行,确认是哪个模型类出了问题
- 检查该模型是否被正确导入,是否在Tortoise初始化的
modules列表中被包含
内容的提问来源于stack exchange,提问作者mrale81
相关产品推荐
相关产品推荐

