python 3.11下motor报coroutine导入错误,根源是motor

PyMongo 4.0+ 与 Python 3.11 兼容没问题,真正卡住你的大概率是 Motor 或 Djongo 的版本滞后,而不是 PyMongo 本身。
Motor 在 Python 3.11 下报 coroutine 导入错误
这是 Motor 3.x(尤其 motor)未适配 Python 3.11 的 <code>asyncio 内部变更所致——Python 3.11 把 asyncio.coroutine 彻底移除了,而旧版 Motor 还在尝试从 asyncio 直接 import 它。
- 确认当前 Motor 版本:
pip show motor;若低于3.5.0,必须升级 - 执行:
pip install --upgrade "motor>=3.5.0"(3.5.0+已完全适配 Python 3.11 的协程机制) - 若项目锁定了旧版 Motor(如
requirements.txt中写死motor==3.3.0),仅升级 PyMongo 无效,必须改 Motor - 注意:Motor 3.5+ 要求 PyMongo ≥ 4.3,所以顺带也得检查
pymongo版本
Djongo 启动时报 NotImplementedError: Database objects do not implement truth value testing
这不是 Python 3.11 的问题,而是 Djongo(如 1.3.6)调用了已被 PyMongo 4.0+ 废弃的 if self.connection: 写法。PyMongo 4.0 起明确禁止对 Database 对象做布尔判断。
- 最直接解法:降级 PyMongo 到 Djongo 兼容的版本,例如
pymongo==3.12.1 - 执行:
pip install "pymongo==3.12.1"(别用>=,Djongo 不支持 PyMongo 4.x) - 验证方式:运行
python manage.py dbshell或makemigrations,不再抛NotImplementedError - 长期建议:关注 Djongo 官方是否发布适配 PyMongo 4.x 的新版;目前(2026 年中)仍无稳定版支持
PyMongo 4.x + Python 3.11 连接 MongoDB Atlas 或自建集群失败
常见现象是 ssl.SSLCertVerificationError 或连接超时,根源几乎全是 TLS 证书链信任问题,而非语法或版本冲突。
- 先装
certifi:pip install certifi - 连接时必须显式传参:
MongoClient(tlsCAFile=certifi.where()),不能只写tls=True - 若用
mongodb+srv://URI,同样生效——SRV 解析后仍走 TLS 握手,tlsCAFile依然接管证书校验 - 企业内网或 PyInstaller 打包场景下,
certifi.where()可能返回空路径或找不到文件,此时需手动指定证书路径,或改用系统级证书更新
最容易被忽略的是:Motor 和 Djongo 都不维护自己的 TLS 层,它们复用 PyMongo 的连接逻辑。所以证书问题在任一驱动里出现,修复方式都一样——不是换驱动,而是补证书信任链。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











