Overview
Esta página describe los cambios que debe realizar en su aplicación cuando actualice a una nueva versión de PyMongo.
Importante
Esta guía incluye cambios importantes solo para las versiones de PyMongo posteriores a la v4.0. Si está actualizando desde PyMongo v2 o v3, consulte la Guía de migración de PyMongo 4.
Antes de actualizar, realice las siguientes acciones:
Asegúrese de que la nueva versión de PyMongo sea compatible con las versiones de MongoDB Server a las que se conecta su aplicación y con la versión de Python en la que se ejecuta. Para obtener información sobre la compatibilidad de versiones, consulte la página de Compatibilidad.
Aborde cualquier cambio importante entre la versión del controlador que utiliza su aplicación y la versión de actualización planificada en la sección Cambios importantes.
Tip
Para minimizar la cantidad de cambios que requiere su aplicación al actualizar las versiones del controlador en el futuro, utilice el API estable.
Mostrar advertencias de desuso
Cuando se utiliza una función obsoleta de PyMongo, el controlador genera un
DeprecationWarningDe forma predeterminada, el intérprete de Python silencia estas advertencias. Para mostrarlas en stderr, inicie Python con las opciones -Wd.
El siguiente ejemplo ejecuta insert.py, una aplicación Python que llama a un método obsoleto. El intérprete muestra un DeprecationWarning porque Python se inició con las opciones -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 los mensajes DeprecationWarning como excepciones, inicie Python con las opciones -We, como se muestra en el siguiente ejemplo:
$ 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.
Tip
Para obtener más información sobre las advertencias del intérprete y la opción -W, consulte la siguiente documentación de Python:
Cambios radicales
Un cambio importante es un cambio en una convención o comportamiento que se inicia en una versión específica del controlador. Este tipo de cambio puede impedir el correcto funcionamiento de la aplicación si no se soluciona antes de actualizar el controlador.
Los cambios importantes de esta sección se clasifican según la versión del controlador que los introdujo. Al actualizar las versiones del controlador, tenga en cuenta todos los cambios importantes entre la versión actual y la versión de actualización.
Ejemplo
Actualización desde la versión 4.0
Si está actualizando PyMongo de v4.0 a v4.7, aborde todos los cambios importantes enumerados para las versiones 4.1 a 4.7, si los hay.
Cambios importantes en la versión 4.14
Se elimina la compatibilidad con MongoDB Server v4.0. La versión mínima compatible con MongoDB Server ahora es v4.2.
Al codificar un objeto
bson.binary.BinaryVector, el valor del campo de metadatospaddingdebe cumplir las siguientes condiciones:Si el subtipo binario es
PACKED_BIT, el valor debe estar entre 0 y 7 (inclusive).De lo contrario, el valor debe ser 0.
Si no se cumplen las condiciones anteriores, PyMongo genera un
ValueError.El parámetro
optionspara el métodouri_parser.parse_uri()es del tipodict. Anteriormente, este parámetro era del tipo_CaseInsensitiveDictionary.
Cambios importantes en la versión 4.11
Se elimina la compatibilidad con MongoDB Server v3.6. La versión mínima compatible con MongoDB Server ahora es v4.0.
Se desestima la compatibilidad con MongoDB Server4.0 v. De acuerdo con los Programas del Ciclo de Vida del Software de MongoDB, una próxima versión secundaria de PyMongo aumentará la versión mínima de MongoDB Server 4.0 de 4.2 a.
Se elimina la compatibilidad con Python v3.8. La versión mínima compatible ahora es la v3.9.
Se elimina la compatibilidad con PyPy v3.9. La versión mínima compatible ahora es la v3.10.
Se elimina la compatibilidad con el
MONGODB-CRmecanismo de autenticación. Para obtener más información sobre la autenticación, consulte la guía "Mecanismos de autenticación".
Cambios importantes en la versión 4.9
Debe utilizar
pymongocryptv1.10 o posterior para utilizar el cifrado de nivel de campo del lado del cliente (CSFLE) en su aplicación.
Cambios importantes en la versión 4.8
Dado que PyMongo v4.8 usa
hatchcomo sistema de compilación backend, ya no es posible compilar el controlador con el archivosetup.py. En su lugar, debe instalar PyMongo con pip. Para instalaciones editables, debe usar pip v21.3 o posterior.
Cambios importantes en la versión 4.7
Todas las apariciones del tipo de colección
SONen todas las clases y comandos internos se han cambiado adict.La propiedad
options.pool_options.metadataahora es de tipodict, noSON. El siguiente ejemplo de código muestra las diferencias en la forma en que estos formatos almacenan datos:
# 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 convertir un objeto de dict de una sola capa en un objeto de SON, pasa el objeto de dict al constructor de SON, tal como se muestra en el siguiente ejemplo:
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')])
Si el objeto dict tiene varias capas, debe convertir los valores uno a la vez, como se muestra en el siguiente ejemplo:
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')])
Cambios importantes en la versión 4.2
Para mejorar el soporte para la herramienta Pyright, la
ClientSessionclase ya no utiliza tipificación genérica.Se requiere pymongocrypt v1.3.0 o posterior para el cifrado de nivel de campo del lado del cliente (CSFLE).
Los paquetes bson, pymongo y gridfs ahora utilizan la variable
__all__para declarar sus APIs públicas. Si tu aplicación contiene una instrucciónfrom bson import *, asegúrese de que siga importando las APIs necesarias.El método
estimated_document_count()siempre usa el comando count. Este comando no está disponible en la API estable de MongoDB en las versiones 5.0.0 a 5.0.8. Si usa el métodoestimated_document_count()con la API estable, debe actualizar a MongoDB Server v5.0.9 o posterior, o configurar la opciónpymongo.server_api.ServerApi.strictenFalse.