PyMongo es la mejor opción para usar MongoDB con Python. La bi­blio­te­ca de co­n­tro­la­do­res estándar es muy clara y fácil de usar. Puedes crear y modificar tus propias bases de datos y co­le­c­cio­nes en unos pocos pasos.

¿Qué hay detrás de PyMongo?

MongoDB, el sistema de gestión de bases de datos NoSQL, se ha co­n­ve­r­ti­do en una verdadera al­te­r­na­ti­va a MySQL en los últimos años. Una gran ventaja es que, gracias a los co­n­tro­la­do­res adecuados, puedes utilizar el lenguaje de pro­gra­ma­ción que prefieras para vi­sua­li­zar los objetos. PyMongo es el paquete de co­n­tro­la­do­res oficial para controlar MongoDB con Python.

Nota

MongoDB almacena los datos como do­cu­me­n­tos JSON, que se combinan e indexan en co­le­c­cio­nes (co­lle­c­tio­ns) para una mejor su­b­di­vi­sión. Po­s­te­rio­r­me­n­te puedes utilizar varios comandos de MongoDB para solicitar, ordenar, modificar, combinar o eliminar los datos.

Cómo instalar PyMongo

Si quieres utilizar la bi­blio­te­ca de co­n­tro­la­do­res para usar MongoDB con Python, te re­co­me­n­da­mos el gestor de paquetes de Python PIP. Con él puedes instalar PyMongo en cualquier momento en el di­s­po­si­ti­vo o servidor en el que se esté eje­cu­ta­n­do MongoDB. El comando co­rre­s­po­n­die­n­te 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 Mo­n­go­Clie­nt. El comando co­rre­s­po­n­die­n­te tiene el siguiente aspecto (sustituye el marcador de posición “<<MongoDB URL>>” por la dirección co­rre­s­po­n­die­n­te):

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

MongoDB tiene tres bases de datos pre­de­te­r­mi­na­das: local, admin y config. Sin embargo, si realmente quieres usar MongoDB con Python de forma efectiva, vas a necesitar bases de datos adi­cio­na­les, que se crean fá­ci­l­me­n­te uti­li­za­n­do la abre­via­tu­ra “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 “li­s­ta­de­clie­n­tes” es el siguiente:

db = client.listadeclientes

Puedes es­ta­ble­cer un pro­ce­di­mie­n­to de au­te­n­ti­ca­ción en este momento para mejorar la pro­te­c­ción de tus datos. Los datos co­rre­s­po­n­die­n­tes a la au­te­n­ti­ca­ción se almacenan por defecto en la base de datos “admin”. Así se introduce una au­te­n­ti­ca­ción:

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

Añadir co­le­c­cio­nes con PyMongo

Una vez que hayas creado una base de datos, puedes añadir co­le­c­cio­nes fá­ci­l­me­n­te. Sin embargo, el sistema solo las registra si realmente contienen do­cu­me­n­tos. 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 in­tro­du­cir contenido en esta nueva colección. Los nuevos archivos al­ma­ce­na­dos pueden co­n­su­l­tar­se, co­m­bi­nar­se o mo­di­fi­car­se 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 au­to­má­ti­ca­me­n­te un campo “_id” único, que puede servir más tarde a la hora de hacer una re­fe­re­n­cia o se­le­c­cio­nar 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 im­po­r­ta­n­te como guardar los datos es poder volver a acceder a ellos más adelante sin problemas. Hay varias maneras de hacerlo; pro­ba­ble­me­n­te 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

Na­tu­ra­l­me­n­te, los datos no son in­mu­ta­bles. Por lo tanto, puede ser que necesites cambiar alguna entrada re­gi­s­tra­da. La co­m­bi­na­ción de MongoDB y Python te ofrece varias opciones para modificar los datos re­gi­s­tra­dos. Además de efectuar cambios en un documento de­te­r­mi­na­do, también puedes realizar cambios en varias o en todas las entradas de una base de datos o de una colección de­te­r­mi­na­da. 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 si­m­ple­me­n­te mo­di­fi­car­la:

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 do­cu­me­n­tos que cumplan con un de­te­r­mi­na­do 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 do­cu­me­n­tos de MongoDB con Python

Si así lo deseas, también tienes la opción de eliminar do­cu­me­n­tos. El fu­n­cio­na­mie­n­to es similar al de modificar una sola entrada o varios do­cu­me­n­tos. Se es­pe­ci­fi­ca si hay que eliminar todos los do­cu­me­n­tos que cumplen ciertos criterios o solo uno en pa­r­ti­cu­lar. Los comandos co­rre­s­po­n­die­n­tes 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.

Ir al menú principal