PyMongo: Usar MongoDB con Python

PyMongo es la mejor opción para usar MongoDB con Python. La biblioteca de controladores estándar es muy clara y fácil de usar. Puedes crear y modificar tus propias bases de datos y colecciones en unos pocos pasos.

¿Qué hay detrás de PyMongo?

MongoDB, el sistema de gestión de bases de datos NoSQL, se ha convertido en una verdadera alternativa a MySQL en los últimos años. Una gran ventaja es que, gracias a los controladores adecuados, puedes utilizar el lenguaje de programación que prefieras para visualizar los objetos. PyMongo es el paquete de controladores oficial para controlar MongoDB con Python.

Nota

MongoDB almacena los datos como documentos JSON, que se combinan e indexan en colecciones (collections) para una mejor subdivisión. Posteriormente puedes utilizar varios comandos de MongoDB para solicitar, ordenar, modificar, combinar o eliminar los datos.

Cómo instalar PyMongo

Si quieres utilizar la biblioteca de controladores para usar MongoDB con Python, te recomendamos el gestor de paquetes de Python PIP. Con él puedes instalar PyMongo en cualquier momento en el dispositivo o servidor en el que se esté ejecutando MongoDB. El comando correspondiente es el siguiente:

python -m pip install pymongo

Cómo crear bases de datos en MongoDB con Python

Después de instalar PyMongo, conéctate a MongoDB. Para ello, utiliza MongoClient. El comando correspondiente tiene el siguiente aspecto (sustituye el marcador de posición “<<MongoDB URL>>” por la dirección correspondiente):

from pymongo import MongoClient
basededatos = MongoClient ('<<MongoDB URL>>')

MongoDB tiene tres bases de datos predeterminadas: local, admin y config. Sin embargo, si realmente quieres usar MongoDB con Python de forma efectiva, vas a necesitar bases de datos adicionales, que se crean fácilmente utilizando la abreviatura “db”. Si la base de datos referida ya existe, se accede a ella. Si todavía no existe una base de datos con el nombre designado, MongoDB la creará por ti. El comando para crear una nueva base de datos llamada “listadeclientes” es el siguiente:

db = client.listadeclientes

Puedes establecer un procedimiento de autenticación en este momento para mejorar la protección de tus datos. Los datos correspondientes a la autenticación se almacenan por defecto en la base de datos “admin”. Así se introduce una autenticación:

connection = MongoClient ("localhost",
username = "user",
password = "password",
authSource = "admin",
authMechanism = "SCRAM-SHA-256")

Añadir colecciones con PyMongo

Una vez que hayas creado una base de datos, puedes añadir colecciones fácilmente. Sin embargo, el sistema solo las registra si realmente contienen documentos. Utiliza el siguiente comando para crear con Python una nueva colección en MongoDB:

collection = basededatos ["clientes_españa"]

MongoDB: utilizar Python para crear entradas en la base de datos

Ya puedes introducir contenido en esta nueva colección. Los nuevos archivos almacenados pueden consultarse, combinarse o modificarse según sea necesario. Un ejemplo de documento es el siguiente:

informaciónclientes = {
"nombre" : "García",
"dirección" : "Calle Ejemplo 10",
"código postal" : "46006",
"ciudad" : "Valencia"
}
collection.insert_one(informaciónclientes)

Puedes añadir entradas de forma colectiva con la función “insert_many”. Cada una de estas entradas recibe automáticamente un campo “_id” único, que puede servir más tarde a la hora de hacer una referencia o seleccionar una entrada. Para añadir conjuntos de entradas, se procede:

informaciónclientes = [
{
"nombre" : "García",
"dirección" : "Calle Ejemplo 10",
"código postal" : "46006",
"ciudad" : "Valencia"
}
{
"nombre" : "Rodríguez",
"dirección" : "Calle Principal 1",
"código postal" : "28007",
"ciudad" : "Madrid"
}
{
"nombre" : "González",
"dirección" : "Calle Amplia 2",
"código postal" : "36002",
"ciudad" : "Pontevedra"
}
]
collection.insert_many(informaciónclientes)

Consultar datos de MongoDB con Python

Tan importante como guardar los datos es poder volver a acceder a ellos más adelante sin problemas. Hay varias maneras de hacerlo; probablemente la más práctica sea utilizar la función MongoDB Find. Para el ejemplo anterior, se podría utilizar de la siguiente manera:

datos = collection.find ( { "ciudad" : "Valencia" } )
print (datos)
# {
"_id" : ObjectID ("7fe4a462991acf79e22c" ),
"nombre" : "García",
"dirección" : "Calle Ejemplo 10",
"código postal" : "46006",
"ciudad" : "Valencia"
}

Modificar entradas en la base de datos de MongoDB con Python

Naturalmente, los datos no son inmutables. Por lo tanto, puede ser que necesites cambiar alguna entrada registrada. La combinación de MongoDB y Python te ofrece varias opciones para modificar los datos registrados. Además de efectuar cambios en un documento determinado, también puedes realizar cambios en varias o en todas las entradas de una base de datos o de una colección determinada. Algunas de las funciones que puedes utilizar son “update_one” y “update_many”.

Ejemplo con “update_one”

La función “update_one” puede servirte para, por ejemplo, cambiar una dirección. Supón que el cliente “García” se ha mudado a otro punto en Valencia. En lugar de borrar su entrada por completo y crear una nueva, puedes simplemente modificarla:

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listadeclientes" ]
mycol = mydb [ "clientes_españa" ]
myquery = { "dirección" : "Calle Ejemplo 10" }
newvalues = { "$set" : { "dirección" : "Calle Diferente 82" } }
mycol.update_one (myquery, newvalues)
#print "customer" after the update:
for x in mycol.find ():
print (x)

Ejemplo con “update_many”

Utiliza el comando “update_many” para cambiar todos los documentos que cumplan con un determinado criterio. En el siguiente ejemplo, se asigna una nueva ciudad a todos los clientes cuyo nombre empieza por “G”:

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listadeclientes" ]
mycol = mydb [ "clientes_españa" ]
myquery = { "nombre" : "$regex" : "^G" }
newvalues = { "$set" : { "ciudad" : "Cádiz" } }
x = mycol.update_many (myquery, newvalues)
print (x.modified_count, "documents updated.")

Eliminar documentos de MongoDB con Python

Si así lo deseas, también tienes la opción de eliminar documentos. El funcionamiento es similar al de modificar una sola entrada o varios documentos. Se especifica si hay que eliminar todos los documentos que cumplen ciertos criterios o solo uno en particular. Los comandos correspondientes son “delete_one” y “delete_many”.

Ejemplo con “delete_one”

Para eliminar un documento de MongoDB con Python, sigue el ejemplo:

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listadeclientes" ]
mycol = mydb [ "clientes_españa" ]
myquery = { "dirección" : "Calle Amplia 2" }
mycol.delete_one (myquery)

En este ejemplo, se elimina la entrada con la dirección “Calle Amplia 2”. El resto de las entradas se mantienen intactas.

Ejemplo para eliminar todas las entradas de una misma colección

Si quieres eliminar varias entradas de una misma colección de MongoDB, sigue el siguiente ejemplo:

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listadeclientes" ]
mycol = mydb [ "clientes_españa" ]
x = mycol.delete_many ( { } )
print (x.deleted_count, "documents deleted.")

En este ejemplo se han eliminado todas las entradas de la colección “clientes_españa”, mientras que la propia colección ha quedado intacta. Ahora puedes añadir otras entradas o, por supuesto, también puedes optar por eliminar la colección.

¿Le ha resultado útil este artículo?
Page top