Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver Pymongo
/

Compatibilidade

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.

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

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.

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.

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.

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.

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

Voltar

Notas de versão

Nesta página