兼容性
MongoDB 兼容性
以下兼容性表指定了与特定版本的 MongoDB 一起使用的推荐版本或 PyMongo 版本。
第一列列出驱动程序版本。
重要
在服务器版本生命周期结束 (EOL) 日期之后的三年内,MongoDB 将确保 MongoDB Server 与驱动程序兼容。要了解有关 MongoDB 版本和 EOL 日期的更多信息,请参阅 MongoDB 软件生命周期时间表。。
兼容性表图例
Icon | 解释 |
---|---|
✓ | 支持所有功能。 |
⊛ | 该驱动程序版本将与 MongoDB 版本一起使用,但并不支持所有新的 MongoDB 功能。 |
无标记 | 驱动程序版本未使用 MongoDB 版本测试。 |
PyMongo 版本 | MongoDB 8.0 | MongoDB 7.0 | MongoDB 6.0 | MongoDB 5.0 | MongoDB 4.4 | MongoDB 4.2 | MongoDB 4.0 | MongoDB 3.6 |
---|---|---|---|---|---|---|---|---|
4.11 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
4.9 到 4.10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
4.4 到 4.8 | ⊛ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
4.2 到 4.3 | ⊛ | ⊛ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
3.12 到 4.1 | ⊛ | ⊛ | ⊛ | ✓ | ✓ | ✓ | ✓ | ✓ |
3.11 | ⊛ | ⊛ | ⊛ | ⊛ | ✓ | ✓ | ✓ | ✓ |
3.9 到 3.10 | ⊛ | ⊛ | ⊛ | ⊛ | ⊛ | ✓ | ✓ | ✓ |
3.7 到 3.8 | ⊛ | ⊛ | ⊛ | ⊛ | ⊛ | ⊛ | ✓ | ✓ |
语言兼容性
PyMongo 同时支持 CPython 和 PyPy。
当 Python 的一个版本被标记为生命周期结束 (EOL) 时,PyMongo 的下一个次要版本将删除对该版本的支持。 该驱动程序为 EOL Python 版本提供以下持续支持:
CPython :与 EOL CPython 版本兼容的最后一个 PyMongo 小版本获得了为期一年的重大错误修复。
PyPy :PyMongo 不支持超过 EOL 日期的 PyPy 版本。
以下兼容性表指定了与特定版本的 Python 一起使用的推荐版本 PyMongo。 第一列列出了驱动程序版本。
Python 3
PyMongo 版本 | CPython 3.13 | CPython 3.12 | CPython 3.11 | CPython 3.10 [ 1 ] | CPython 3.9 | CPython 3.8 | CPython 3.7 | CPython 3.6 | CPython 3.5 | CPython 3.4 | PyPy3 |
---|---|---|---|---|---|---|---|---|---|---|---|
4.11 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.9 到 4.10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
4.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.5 到 4.7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
4.3 到 4.4 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.2 | ✓ | ✓ | ✓ | ✓ | |||||||
4.1 [ 2 ] | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
3.13 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
3.12 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
3.11 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
3.10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
3.7 到 3.9 | ✓ | ✓ | ✓ | ✓ | ✓ |
[1] | Python 3.10及更高版本与MongoDB 4.0及更早版本的 TLS/SSL 不兼容。 有关详细信息,请参阅故障排除指南的 TLS部分。 |
[2] | Pymongo 4.1 需要 Python 3.6.2 或更高版本。 |
Python 2
PyMongo版本 3.7 到 3.12 与Python 2.7 和 PyPy(与Python 2.7 兼容的替代解释器)兼容。但是,在某些情况下, PyMongo应用程序在Python 2 环境中运行时的行为会有所不同。
以下部分描述了使用PyMongo时Python 2 和Python 3 之间的行为差异。
二进制数据
在所有版本的Python中, PyMongo将字节 类的实例编码为具有子类型0 (二进制数据的默认子类型)的二进制数据。在Python3 中, PyMongo将这些值解码为bytes
类的实例。在Python2 中,驾驶员将它们解码为具有子类型 的 Binary0 类的实例。有关显示差异的代码示例,请参阅扩展JSON页面。
在解码子类型为 的JSON二进制值时,驾驶员的行为方式相同。在Python0 3中,它将这些值解码为bytes
类的实例。在Python2 中,驾驶员将它们解码为具有子类型 的Binary
0类的实例。有关显示差异的代码示例,请参阅扩展JSON页面。
Pickled ObjectIds
如果您在Python 2 中对 ObjectId
进行了 pickle,并想在Python 3 中对其进行 unpickle,则必须将 encoding='latin-1'
作为参数传递给 pickle.loads()
方法。
以下示例展示了如何使用Python 3 对在Python 2 中进行 pickle 的 ObjectId
进行 unpickle:
import pickle pickle.loads(b'<ObjectId byte stream>', encoding='latin-1')
如果Python 3应用程序使用兼容的序列化协议来 pickle ObjectId
,您可以使用Python 2 来取消 pickle。要在Python 3 中指定兼容协议,请为 pickle.dumps()
方法的 protocol
参数传递 0、1 或 2 的值。
以下示例在Python 3 中序列化 ObjectId
,然后打印 ObjectId
和生成的 bytes
实例:
import pickle from bson.objectid import ObjectId oid = ObjectId() oid_bytes = pickle.dumps(oid, protocol=2) print("ObjectId: {}".format(oid)) print("ObjectId bytes: {}".format(oid_bytes))
ObjectId: 67af9b1fae9260c0e97eb9eb ObjectId bytes: b'\x80\x02cbson.objectid\nObjectId\nq\x00...
以下示例取消上一示例中 ObjectId
的封装,然后打印 bytes
和 ObjectId
实例:
import pickle from bson.objectid import ObjectId oid_bytes = b'\x80\x02cbson.objectid\nObjectId\nq\x00...' oid = pickle.loads(oid_bytes) print("ObjectId bytes: {}".format(oid_bytes)) print("ObjectId: {}".format(oid))
ObjectId bytes: b'\x80\x02cbson.objectid\nObjectId\nq\x00)... ObjectId: 67af9b1fae9260c0e97eb9eb