Compatibilidade com o MongoDB
A tabela de compatibilidade a seguir especifica a versão recomendada ou versões do PyMongo para usar com uma versão específica do MongoDB.
A primeira coluna lista a versão do driver.
Importante
O MongoDB garante a compatibilidade entre o MongoDB Server e os drivers por três anos após a data de fim da vida útil (EOL) da versão do servidor. Para saber mais sobre a versão do MongoDB e as datas de EOL, consulte Cronograma do ciclo de vida do software MongoDB.
Legenda da tabela de compatibilidade
Icon | Explicação |
---|---|
✓ | Todas as funcionalidades são suportadas. |
⊛ | A versão Driver funcionará com a versão MongoDB, mas nem todos os novos recursos MongoDB são suportados. |
✗ | A versão do driver não funcionará com a versão do MongoDB. Tentar conectar-se à versão do MongoDB resultará em erros. |
Sem marca | A versão Driver não é testada com a versão MongoDB. |
Versão do PyMongo | MongoDB 8.0 | MongoDB 7.0 | MongoDB 6.0 | MongoDB 5.0 | MongoDB 4.4 | MongoDB 4.2 |
---|---|---|---|---|---|---|
4.9 a 4.10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
4.4 a 4.8 | ⊛ | ✓ | ✓ | ✓ | ✓ | ✓ |
4.2 a 4.3 | ⊛ | ⊛ | ✓ | ✓ | ✓ | ✓ |
3.7 a 4.1 | ⊛ | ⊛ | ⊛ | ✓ | ✓ | ✓ |
Compatibilidade de linguagem
O PyMongo suporta CPython e PyPy.
Quando uma versão do Python é marcada como fim da vida útil (EOL), a próxima versão menor do PyMongo elimina o suporte para essa versão. O driver oferece o seguinte suporte contínuo para versões do EOL Python:
CPython: a última versão menor do PyMongo compatível com a versão EOL CPython recebe correções críticas de bugs por um ano.
PyPy: o PyMongo não suporta versões do PyPy após a data de EOL.
A tabela de compatibilidade a seguir especifica a versão recomendada do PyMongo para uso com uma versão específica do Python. A primeira coluna lista a versão do driver.
Python 3
Versão do 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.10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
4.9 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
4.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.5 a 4.7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
4.3 a 4.4 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.2 | ✓ | ✓ | ✓ | ✓ | |||||||
4.1 [2] | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
4.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
3.13 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
3.12 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
3.11 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
3.10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
3.7 a 3.9 | ✓ | ✓ | ✓ | ✓ | ✓ |
[1] | Versões do Python 3.10 e posteriores não são compatíveis com TLS/SSL para versões do MongoDB 4.0 e anteriores. Para obter mais informações, consulte a seção TLS do guia Solução de problemas. |
[2] | O Pymongo 4.1 exige Python 3.6.2 ou versão posterior. |
Para obter mais informações sobre como ler as tabelas de compatibilidade, consulte Tabelas de compatibilidade do MongoDB.
Python 2
As versões do PyMongo 3.7 a 3.12 são compatíveis com Python 2.7 e PyPy, um interpretador alternativo compatível com Python 2.7. No entanto, em alguns casos, os aplicativos PyMongo se comportam de forma diferente quando executados em um ambiente Python 2.
As seções seguintes descrevem as diferenças no comportamento entre Python 2 e Python 3 ao utilizar o PyMongo.
Dados binários
Em todas as versões do Python, o PyMongo codifica instâncias da classe bytes como dados binários com 0 subtipo, o subtipo padrão para dados binários. No 3 Python, o PyMongo decodifica esses valores para instâncias da bytes
classe. No 2 Python, o driver as decodifica para instâncias da classe Binary com 0 subtipo.
Os seguintes exemplos de código mostram como o PyMongo decodifica instâncias da classe bytes
. Selecione a aba Python 2 ou Python 3 para visualizar o código correspondente.
from pymongo import MongoClient client = MongoClient() client.test.test.insert_one({'binary': b'this is a byte string'}) doc = client.test.test.find_one() print(doc)
{u'_id': ObjectId('67afb78298f604a28f0247b4'), u'binary': Binary('this is a byte string', 0)}
from pymongo import MongoClient client = MongoClient() client.test.test.insert_one({'binary': b'this is a byte string'}) doc = client.test.test.find_one() print(doc)
{'_id': ObjectId('67afb78298f604a28f0247b4'), 'binary': b'this is a byte string'}
O driver se comporta da mesma maneira ao decodificar valores binários JSON com subtipo 0. No Python 3, ele decodifica esses valores para instâncias da classe bytes
. No Python 2, o driver os decodifica para instâncias da classe Binary
com subtipo 0. Para exemplos de código que mostram as diferenças, consulte a página JSON estendido.
ObjectIds em pedaços
Se você selecionou um ObjectId
no Python 2 e deseja retirá-lo do Python 3, deverá passar encoding='latin-1'
como um argumento para o método pickle.loads()
.
O exemplo a seguir mostra como usar o Python 3 para desmarcar um ObjectId
que foi selecionado no Python 2:
import pickle pickle.loads(b'<ObjectId byte stream>', encoding='latin-1')
Se um aplicação Python 3 usar um protocolo de serialização compatível para desmarcar um ObjectId
, você poderá usar o Python 2 para desmarcar. Para especificar um protocolo compatível no Python 3, passe um valor de 0, 1 ou 2 para o parâmetro protocol
do método pickle.dumps()
.
O exemplo a seguir seleciona um ObjectId
no Python 3 e, em seguida, imprime o ObjectId
e a instância bytes
resultante:
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...
O exemplo a seguir retira o ObjectId
do exemplo anterior e então imprime as instâncias bytes
e 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