Menu Docs

Página inicial do DocsDesenvolver aplicaçõesDrivers PythonPyMongo

Atualizar versões do PyMongo

Nesta página

  • Visão geral
  • Mostrar avisos de depreciação
  • Mudanças de última hora

Esta página descreve as alterações que você deve fazer no seu aplicativo ao atualizar para uma nova versão do PyMongo.

Importante

Este guia inclui alterações significativas apenas nas versões do PyMongo após a v4.0. Se você estiver atualizando do PyMongo v2 ou v3, consulte o Guia de Migração do PyMongo .4

Antes de atualizar, execute as seguintes ações:

  • Certifique-se de que a nova versão do PyMongo seja compatível com as versões do MongoDB Server às quais seu aplicação se conecta e com a versão do Python em que seu aplicação é executado. Para obter informações sobre compatibilidade de versão, consulte a página Compatibilidade do PyMongo .

  • Resolva quaisquer alterações significativas entre a versão do driver que seu aplicativo está usando e a versão de atualização planejada na seção Alterações significativas.

Dica

Para minimizar o número de alterações que seu aplicação exige ao atualizar as versões do driver no futuro, use a Stable API.

Quando você usa um recurso obsoleto do PyMongo, o driver levanta um DeprecationWarning. Por padrão, o interpretador Python silencia esses avisos. Para imprimi-las no stderr, inicie o Python com as opções -Wd .

O exemplo a seguir executa insert.py, um aplicativo Python que chama um método obsoleto. O interpretador mostra um DeprecationWarning porque o Python foi iniciado com as opções -Wd .

$ python3 -Wd insert.py
insert.py:4: DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
client.test.test.insert({})

Para tratar DeprecationWarning mensagens como exceções, inicie o Python com as opções -We , conforme mostrado no exemplo a seguir:

$ python3 -We insert.py
Traceback (most recent call last):
File "insert.py", line 4, in <module>
client.test.test.insert({})
File "/home/durin/work/mongo-python-driver/pymongo/collection.py", line 2906, in insert
"instead.", DeprecationWarning, stacklevel=2)
DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.

Dica

Para obter mais informações sobre avisos do intérprete e a opção -W , consulte a seguinte documentação do Python:

Uma alteração significativa é uma alteração de uma convenção ou comportamento a partir de uma versão específica do driver. Esse tipo de alteração pode impedir que seu aplicativo funcione corretamente se não for resolvido antes de atualizar o driver.

As alterações interruptivas nesta seção são categorizadas pela versão do driver que as introduziram. Ao atualizar as versões do driver, resolva todas as alterações interruptivas entre a versão atual e a atualizada.

Exemplo

Atualização da versão 4.0

Se você estiver atualizando o PyMongo da v4.0 para a v4.7, resolva todas as alterações significativas listadas para as versões 4.1 a 4.7, se houver.

  • Todas as ocorrências do tipo de coleção SON em todas as classes e comandos internos foram alteradas para dict.

  • A propriedade options.pool_options.metadata agora é do tipo dict, não SON. O seguinte exemplo de código mostra as diferenças em como estes formatos armazenam dados:

# Before (SON)
>>> from pymongo import MongoClient
>>> client = MongoClient()
>>> client.options.pool_options.metadata
SON([('driver', SON([('name', 'PyMongo'), ('version', '4.7.0.dev0')])), ('os', SON([('type', 'Darwin'), ('name', 'Darwin'), ('architecture', 'arm64'), ('version', '14.3')])), ('platform', 'CPython 3.11.6.final.0')])
# After (dict)
>>> client.options.pool_options.metadata
{'driver': {'name': 'PyMongo', 'version': '4.7.0.dev0'}, 'os': {'type': 'Darwin', 'name': 'Darwin', 'architecture': 'arm64', 'version': '14.3'}, 'platform': 'CPython 3.11.6.final.0'}

Para converter um objeto dict de camada única em um objeto SON , passe o objeto dict para o construtor SON , conforme mostrado no exemplo a seguir:

>>> data_as_dict = client.options.pool_options.metadata
>>> SON(data_as_dict)
SON([('driver', {'name': 'PyMongo', 'version': '4.7.0.dev0'}), ('os', {'type': 'Darwin', 'name': 'Darwin', 'architecture': 'arm64', 'version': '14.3'}), ('platform', 'CPython 3.11.6.final.0')])

Se o objeto dict tiver múltiplas camadas, você deverá converter os valores um de cada vez, como mostrado no seguinte exemplo:

>>> def dict_to_SON(data_as_dict: dict[Any, Any]):
... data_as_SON = SON()
... for key, value in data_as_dict.items():
... data_as_SON[key] = dict_to_SON(value) if isinstance(value, dict) else value
... return data_as_SON
>>>
>>> dict_to_SON(data_as_dict)
SON([('driver', SON([('name', 'PyMongo'), ('version', '4.7.0.dev0')])), ('os', SON([('type', 'Darwin'), ('name', 'Darwin'), ('architecture', 'arm64'), ('version', '14.3')])), ('platform', 'CPython 3.11.6.final.0')])
  • Para melhorar o suporte para o Pyright ferramenta, a ClientSession classe não usa mais digitação genérica.

  • pymongocrypt v1.3.0 ou posterior é necessário para CSFLE (Criptografia de Nível de Campo do Lado do Cliente).

  • Os pacotes BSON, PyMongo e Gridfs agora usam a variável __all__ para declarar suas APIs públicas. Se seu aplicativo contiver uma declaração from bson import * , verifique se ela ainda importa as APIs necessárias.

  • O método estimated_document_count() sempre utiliza o comando de contagem. Este comando não está disponível na Stable API nas versões 5.0.0 do MongoDB a 5.0.8. Se você usar o método estimated_document_count() com a Stable API, deverá atualizar para o MongoDB Server v5.0.9 ou posterior, ou definir a opção pymongo.server_api.ServerApi.strict como False.

← NOVIDADES