Menu Docs
Página inicial do Docs
/ / /
Driver Pymongo
/

Compatibilidade

Nesta página

  • Compatibilidade com o MongoDB
  • Legenda da tabela de compatibilidade
  • Compatibilidade de linguagem
  • Python 3
  • Python 2
  • Compatibilidade do Motor

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 do driver funcionará com a versão do MongoDB , mas nem todos os novos recursos do MongoDB são suportados.

A versão do driver não funcionará com a versão MongoDB . Tentar se conectar à versão MongoDB resultará em erros.

Sem marca

A versão do driver não é testada com a versão do MongoDB .

Versão do 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 a 4.10

4.4 a 4.8

4.2 a 4.3

3.12 a 4.1

3.11

3.9 a 3.10

3.7 a 3.8

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.

As seguintes tabelas de compatibilidade mostram a compatibilidade do PyMongo com diferentes versões do CPython e PyPy.

Para obter mais informações sobre como ler as tabelas de compatibilidade, consulte Tabelas de compatibilidade do MongoDB.

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

4.11 a 4.12

4.9 a 4.10

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

Versão do PyMongo
PyPy3.10
PyPy3.9
PyPy3.8
PyPy3.7
PyPy3.6
PyPy3.5

4.11 a 4.12

4.8 a 4.10

4.5 a 4.7

4.2 a 4.4

4.1 [2]

4.0

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](1, 2) O PyMongo 4.1 exige Python 3.6.2 ou posterior.

As versões de 3.7 a 3.12 do PyMongo são compatíveis com Python 2.7 e PyPy2.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 subtipo 0, o subtipo padrão para dados binários. No Python 3, o PyMongo 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.

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

A tabela a seguir mostra as versões equivalentes do Motor e do PyMongo.

Versão do Motor
Versão do PyMongo

3.7

4.10

3.6

4.9

3.3

4.4

3.1

4.2

3.0

4.0

Voltar

Notas de versão