python
module_error
ai_generated
true
sqlalchemy.exc.InvalidRequestError: 初始化映射器 Mapper[User] 时,表达式 'Post' 无法定位名称 ('Post')。如果这是一个类名,请考虑在两个依赖类都定义后,将此 relationship() 添加到类中。
sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper[User], expression 'Post' failed to locate a name ('Post'). If this is a class name, consider adding this relationship() to the class after both dependent classes have been defined.
ID: python/sqlalchemy-circular-import-models
80%修复率
88%置信度
0证据数
2024-02-10首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 2.0.x | active | — | — | — |
根因分析
模型模块之间的循环导入导致在配置映射器时,某个模型类尚未定义。
English
Circular imports between model modules cause one model class to be undefined when the other's mapper is configured.
解决方案
-
90% 成功率
Use string-based relationship references: class User(Base): posts = relationship('Post', back_populates='user') - and ensure Post is defined later in the same module or imported lazily. -
85% 成功率
Use the 'late-binding' pattern: define relationships in a separate configure_mappers() call after all models are imported: from sqlalchemy.orm import configure_mappers; configure_mappers()
无效尝试
常见但无效的做法:
-
90% 失败
Top-level imports still trigger the same circular dependency; the classes are not yet defined at import time.
-
80% 失败
If the __init__.py imports both modules, it still hits the circular reference during module initialization.