BLOGAnnounced at MongoDB.local NYC 2024: A recap of all announcements and updates — Learn more >

Cómo utilizar Python con MongoDB

Siga el uso de Atlas
Conéctese gratis hoy

Python, el principal lenguaje de programación para ciencia de datos, y MongoDB, con su esquema flexible y dinámico, son una combinación fantástica para crear aplicaciones web modernas, API JSON y procesadores de datos, solo por nombrar algunos. MongoDB tiene un controlador Python nativo y un equipo de ingenieros dedicados a garantizar que MongoDB y Python funcionen juntos sin problemas.

Tabla de contenido
¿Qué es Python?

Python, la navaja suiza de los lenguajes de tipeado dinámico de hoy en día, tiene un soporte integral para tareas comunes de manipulación y procesamiento de datos, lo que lo convierte en uno de los mejores lenguajes de programación para la ciencia de datos y el desarrollo web. El diccionario nativo de Python y los tipos de datos de lista lo convierten, después de JavaScript, en el segundo mejor lenguaje para manipular documentos JSON, y muy adecuado para trabajar con BSON. PyMongo, la biblioteca de controladores estándar de MongoDB para Python, es fácil de usar y ofrece una API intuitiva para acceder a bases de datos, colecciones y documentos.

Los objetos recuperados de MongoDB a través de PyMongo son compatibles con diccionarios y listas, por lo que podemos manipularlos, iterarlos e imprimirlos con facilidad.

Cómo almacena MongoDB los datos MongoDB almacena datos en documentos tipo JSON:

```json # documento Mongodb (estilo JSON ) document_1 = { "_id" : "BF00001CFOOD", "item_name" : "Bread", "quantity" : 2, "ingredients" : "all-purpose flour" }

python # diccionario de python dict_1 = { "item_name" : "blender", "max_discount" : "10%", "batch_number" : "RR450020FRG", "price" : 340 }

``` Siga leyendo para obtener una descripción general de cómo comenzar y aprovechar el potencial de esta poderosa combinación.

Prerrequisitos

Descargar e instale Python en su máquina. Para confirmar si su instalación es correcta, escriba Python --version en su terminal de línea de comando. Deberías obtener algo similar a:

Puedes seguir los ejemplos de Python MongoDB en este tutorial incluso si eres nuevo en Python.

Le recomendamos que MongoDB Atlas establezca cluster un de nivel gratuito para este tutorial.
Inicie su cluster de nivel gratuito ahora
Más información sobre Atlas
Conexión de Python y MongoDB Atlas

PyMongo tiene un conjunto de paquetes para la interacción Python MongoDB. Para el siguiente tutorial, comience creando un entorno virtual, y actívelo.

Ahora que se encuentra en su entorno virtual, puede instalar PyMongo. En su terminal, escriba:

Ahora, podemos usar PyMongo como biblioteca Python MongoDB en nuestro código con una declaración de importación.

Creación de una base de datos MongoDB en Python

El primer paso para conectar Python a Atlas es crear un clúster.Puede seguir las instrucciones de la documentación para aprender a crear y configurar su clúster.

A continuación, cree un archivo llamado pymongo_get_database.py en cualquier carpeta para escribir código PyMongo. Puede utilizar cualquier editor de texto simple, como Visual Studio Code.

Cree el cliente mongodb agregando lo siguiente:

Para crear un MongoClient, necesitará una cadena de conexión a su base de datos. Si está utilizando Atlas, puede seguir los pasos de la documentación para obtener esa cadena de conexión. Utilice el connection_string para crear el mongoclient y obtener la conexión de base de datos MongoDB. Cambie el nombre de usuario, la contraseña y el nombre del clúster.

En este tutorial de Python mongodb, crearemos una lista de compras y agregaremos algunos artículos. Para ello, creamos una base de datos user_shopping_list.

MongoDB no crea una base de datos hasta que tenga colecciones y documentos. Vamos a crear una colección a continuación.

Creación de una colección en Python

Para crear una colección, pase el nombre de la colección a la base de datos. En un nuevo archivo denominado archivo pymongo_test_insert.py, agregue el código siguiente.

This creates a collection named user_1_items in the user_shopping_list database.

Insertar documentos en Python

Para insertar muchos documentos a la vez, utilice el método pymongo insert_many().

Let’s insert a third document without specifying the _id field. Esta vez, agregamos un campo de tipo de datos "fecha". Para agregar fecha usando PyMongo, use el paquete Python dateutil.

Comience instalando el paquete con el siguiente comando:

Add the following to pymongo_test_insert.py:

Utilizamos el método insert_one() para insertar un solo documento.

Abra la línea de comandos y vaya hasta la carpeta donde guardó pymongo_test_insert.py.

Ejecute el archivo usando el comando:

Vamos a conectarnos a la UI de MongoDB Atlas y comprobar lo que tenemos hasta ahora.

Inicie sesión en su clúster de Atlas y haz clic en el botón de colecciones.

En el lado izquierdo, puede ver la base de datos y el nombre de la colección que creamos. Si hace clic en el nombre de la colección, también puede ver los datos:

vista de la base de datos y el nombre collection
vista de datos al hacer clic

El campo ID es del tipo ObjectId de forma predeterminada. Si no especificamos el campo ID , MongoDB genera lo mismo. No todos los campos presentes en un documento están presentes en otros. Pero MongoDB no le impide ingresar datos; esta es la esencia de una base de datos sin esquema.

Si insertamos item_3 nuevamente, MongoDB insertará un nuevo documento, con un nuevo valor ID. Sin embargo, las dos primeras inserciones arrojarán un error debido al campo ID, el identificador único.

Consultando en Python

Veamos todos los documentos juntos usando find(). Para eso, crearemos un archivo separado pymongo_test_query.py:

Abra la línea de comando y navegue hasta la carpeta donde guardó pymongo_test_query.py. Ejecute el archivo usando el comando:

Obtenemos la lista de objetos del diccionario como salida:

lista de diccionarios

Podemos ver los datos pero el formato no es tan grande. Entonces, imprimamos los nombres de los elementos y su categoría reemplazando la línea print con lo siguiente:

Aunque MongoDB obtiene todos los datos, obtenemos un 'KeyError' de Python en el tercer documento.

Error de clave de Python

Para tratar errores de datos faltantes en Python, use pandas.DataFrames. DataFRames son estructuras de datos 2D utilizadas para tareas de procesamiento de datos. El método PyMongo find() devuelve objetos de diccionario que se pueden convertir en un marco de datos en una sola línea de código.

Instale la biblioteca pandas como:

Ahora importe la biblioteca pandas agregando la siguiente línea en la parte superior del archivo:
Y reemplaza el código en el bucle con lo siguiente para tratar KeyError en un solo paso:
Los errores se reemplazan por NaN y NaT para los valores faltantes.

Nan y Nat para los valores faltantes.
indexación en Python

MongoDB El número de documentos y collection en una base de datos del mundo real siempre sigue aumentando. Puede llevar mucho tiempo buscar documentos específicos (por ejemplo, documentos que tengan “harina para todo uso” entre sus ingredientes) en una collection muy grande. índice hace que la búsqueda en bases de datos sea más rápida y eficiente, y reduce el costo de consultar operaciones como ordenar, contar y comparar.

MongoDB define índice en el nivel collection .

Para que el índice tenga más sentido, agregue más documentos a nuestra collection. Inserte muchos documentos a la vez usando el método insert_many () . Para documentos de muestra, copie el código de Github y ejecute Python PyMongo_test_insert_more_items.py en tu terminal.

Digamos que queremos los elementos que pertenecen a la categoría 'comida':

Para ejecutar la consulta anterior, MongoDB tiene que escanear todos los documentos. Para verificar esto, descargue Compass. Conéctese a su cluster usando la cadena de conexión. Abra la collection y vaya a la pestaña Explicar el plan. En 'filter', dé los criterios anteriores y vea los resultados:

Resultados de la consulta sin índice

Tenga en cuenta que la consulta escanea 14 documentos para obtener cinco resultados.

Vamos a crear un solo índice en el campo "categoría". En un nuevo archivo denominado pymongo_index.py, añada el siguiente código.

Explique de nuevo el mismo filtro en la interfaz de usuario de Compass:

Resultados de la consulta con índice

Esta vez, sólo se escanean cinco documentos debido al índice de categorías. No vemos una diferencia significativa en el tiempo de ejecución debido a la pequeña cantidad de documentos. Pero vemos una enorme reducción en el número de documentos escaneados para la consulta. índice también ayuda en la optimización del rendimiento para agregaciones. Las agregaciones están fuera de alcance para este tutorial, pero aquí hay una descripción general.

Conclusión

En este tutorial de Python MongoDB, aprendimos los conceptos básicos de PyMongo y realizamos operaciones simples de bases de datos. Como siguiente paso, explore usar PyMongo para realizar operaciones CRUD con datos de negocios. Si no trabajó con este tutorial, comience ahora instalando MongoDB Atlas gratis. También hay un curso disponible sobre ese tema específico en MongoDB University.

¿Listo para empezar?

Lance un nuevo cluster o migre a MongoDB Atlas sin tiempo de inactividad y conéctese a Python hoy.
Pruébalo ahora

Preguntas frecuentes

¿Cómo se conecta MongoDB a Python?

Hay tres formas de conectar MongoDB a Python:

  • PyMongo
    • El controlador nativo para conectar MongoDB y Python. PyMongo dispone de todas las librerías para realizar operaciones con bases de datos desde código Python. Dado que PyMongo es un controlador de bajo nivel, es rápido e intuitivo y proporciona más control.
  • MongoEngine:
    • MongoEngine es un Document Object Mapper. Podemos definir un esquema que mapee los objetos de la aplicación y los datos del documento.
  • Djongo
    • Usamos Djongo para aplicaciones web Python usando el marco Django. Convierte las consultas SQL existentes en documentos de consulta mongodb.

Obtenga más información sobre el uso de MongoEngine y Djongo.

¿Qué base de datos es mejor para Python?

Python funciona bien con diferentes bases de datos. La elección depende de los requisitos de su proyecto. MongoDB, debido a su esquema flexible y cómo se mapea de cerca a los objetos nativos de Python, es una gran opción para las aplicaciones Python. Esto hace que Python y MongoDB sean una excelente opción para realizar trabajos de desarrollo web.

Para obtener más información, lea NoSQL vs. SQL Databases. También hay algunas bases de datos nativas de Python, pero no son populares y tienen capacidades muy limitadas.

¿MongoDB es bueno para Python?

MongoDB almacena datos en documentos JSON flexibles y sin esquema. Python tiene bibliotecas enriquecidas que procesan directamente los formatos de datos JSON y BSON. Python se integra bien con MongoDB a través de controladores como PyMongo, MongoEngine, entre otros.

Esto hace que MongoDB sea bueno para Python al eliminar la rigidez en el esquema de la base de datos.

¿Cómo almacena Python los datos en MongoDB?

Python almacena datos en MongoDB a través de bibliotecas como PyMongo y MongoEngine. Para aplicaciones web que utilizan el marco Django, podemos usar Djongo.

  • PyMongo: PyMongo es el controlador nativo de Python para la base de datos MongoDB. Dado que es un controlador de bajo nivel, es más rápido y también una forma preferida de conectar Python y MongoDB.
  • MongoEngine: con MongoEngine, podemos crear un esquema (sí, para una base de datos sin esquema). MongoEngine sigue el enfoque ODM para mapear clases de aplicaciones y documentos de bases de datos.
  • Djongo: Djongo es un transpilador SQL. Puede migrar proyectos SQL existentes a MongoDB sin muchos cambios en el código.

Obtenga más información sobre el uso de MongoEngine y Djongo.

¿Cómo se usa MongoDB con Python?
Podemos conectar MongoDB con Python usando PyMongo. Pymongo es el controlador nativo de Python para MongoDB. Tiene una sintaxis similar a la de MongoShell, por lo que podemos correlacionar fácilmente y utilizar el método adecuado. Por ejemplo, insertMany() en MongoShell corresponde a insert_many() en PyMongo. También podemos conectar Python y MongoDB usando MongoEngine y Djongo. Sin embargo, el enfoque preferido es usar PyMongo porque es un controlador de bajo nivel que es más rápido y proporciona más control. Para obtener más información sobre PyMongo, consulte nuestra documentación sobre PyMongo.
¿Cómo se obtienen datos de MongoDB usando Python?

El método más eficiente y fácil para conectarse a MongoDB en Python es usar PyMongo. PyMongo es el controlador nativo de Python para MongoDB. Para conectarnos, usamos el comando pymongo.MongoClient() con el connection_string como argumento. Luego, podemos usar el método find() para obtener los documentos requeridos. Ejemplo:

Importar PyMongo

# Conéctese a MongoDB desde Python usando PyMongo
client = pymongo.MongoClient(CONNECTION_STRING)
# Abra la base de datos
dbname = client['user_shopping_list']
# Consiga la collection
collection_name = dbname["item_details"]
# Obtenga los datos de la collection
item_details = collection_name.find()import pymongo

# Conéctese a MongoDB desde Python usando pymongo
client = pymongo.MongoClient(CONNECTION_STRING)
# Abra la base de datos
dbname = client ['user_shopping_list']
# Obtenga la collection
collection_name = dbname["item_details"]
# Obtenga los datos de la collection
item_details = collection_name.find()
¿Cómo se insertan datos en MongoDB usando Python?

Para insertar datos, conecte MongoDB y Python usando PyMongo. PyMongo es el controlador nativo de Python para MongoDB. Una vez que nos conectamos, podemos usar los métodos de PyMongo como insert_one() y insert_many(). Ejemplo:

# Obtener mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Obtenga/cree base de datos 
 dbname = client['user_shopping_list']

# Obtenga/cree la collection
collection_name = dbname["item_details"]

# Cree el documento
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Inserte una fila
collection_name.insert_one(item_1)# Obtener mongoclient
 client = pymongo.MongoClient(CONNECTION_STRING)

# Obtenga/cree base de datos
dbname = client['user_shopping_list']

# Obtenga/cree la collection
collection_name = dbname["item_details"]

# Cree el documento
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Inserte una fila 
collection_name.insert_one(item_1)
¿Cómo se crea una base de datos en MongoDB usando Python?

Usamos el controlador PyMongo para crear una base de datos MongoDB usando código Python. Ejemplo:

Importar pymongo

# Obtenga el mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Obtenga/cree base de datos
dbname = client['user_shopping_list']import pymongo

# Obtenga el mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Obtenga/cree base de datos
dbname = client['user_shopping_list']
Diferencia entre bases de datos SQL y NoSQL

Las bases de datos SQL también se denominan “relational databases” y las bases de datos NoSQL (“no SQL” o “no solo SQL”) también se denominan “non-relational databases”. Las relational databases se denominan “relacionales” porque se basan en el “modelo de datos relacionales” en matemáticas.

Las bases de datos SQL almacenan datos en forma de tablas con filas y columnas fijas. Las bases de datos NoSQL vienen en muchos tipos, por ejemplo:

  1. Tipo de documento: documentos JSON

  2. Valor clave: Pares de valor clave

  3. Columna ancha: el almacén de datos de columna ancha tiene tablas con filas y columnas dinámicas

Ejemplos de bases de datos basadas en SQL son MySQL, Microsoft SQL Server, PostgreSQL y SQLite. Ejemplos de bases de datos NoSQL son: MongoDB, CouchDB, Redis, DynamoDB, entre otros.

Para obtener información más detallada acerca de la diferencia, consulte SQL vs NoSQL.