martes, 8 de octubre de 2013

Como usar MongoDB con Python

Como vimos en el tutorial de Perl MongoDB es una gran base datos  NoSQL y orientado a documentos con licencia GPL v3 programada en C++ lo cual es bastante bueno y cuenta con APIs para los lenguajes de programación mas populares en este caso veremos que python no es la excepción.

Como en el tutorial de Perl se supone que ya tienes instalado MongoDB en tu sistema y sabes lo básico desde su propia interfaz.

Para usarlo en Python necesitamos instalar pymongo,el cual yo recomiendo que lo hagan con pip:

pip install pymongo

Ahora vamos a iniciar nuestro script de prueba:

Primero ponemos el hashbang y la codificación como siempre:

#!/usr/bin/env python3
Ahora importamos MongoClient que es que usaremos para la consulta de datos,

 from pymongo import MongoClient

Al igual que el tutorial de Perl vamos a usar los datos por defecto en host ponemos localhost y en puerto ponemos 27017:

cliente = MongoClient('localhost', 27017) 

Como dije son los datos por defecto y esto lo sabe la API asi que es lo mismo eso de arriba y esto:

cliente = MongoClient()
Con esto ya tenemos un objeto con los datos de mongo,digamos que es como si hubiéramos iniciado sesión en la shell de mongo.

Por ejemplo estas ordenes:



Como vemos aun esta lo que hicimos en el tutorial de Perl,para ver eso desde un script en Python vamos a hacer lo siguiente:

Teniendo el objeto cliente ya creado,vamos a acceder a la base de datos,en este caso test:

Podemos hacerlo con notacion de punto o en modo diccionario,recomiendo notacion de punto en este caso:

db = cliente.test
Para autentificarnos usamos esta sintaxis:

db.authenticate('user', 'password')

Ahora la variable db ya es un objeto que contiene los datos de la base test,ahora vamos a acceder a la colección,en este caso use some_cool:

De igual manera notacion de punto o diccionario pero en esta ocasión operamos sobre la variable db:

coleccion = db["some_coll"]

En estos momentos la variable colección cuenta con los datos de la colección some_coll de Mongo,podemos usar funciones de la misma como por ejemplo ver el numero de elementos:

En la shell de Mongo usaríamos:

db.some_coll.count()

Adivinen como se hace en python? :

print(coleccion.count())

Así :D

Y para hacer lo que hicimos en la imagen?

db.some_coll.find()
Primero iteramos sobre la función find del objeto colección que creamos y despues imprimimos:

for i in coleccion.find():
   print(i)




En la función find podemos pasarle como parámetro un filtrado,por ejemplo:

for i in coleccion.find({"value" : "foobar"}):
    print(i)





Bien ahora vamos a insertar datos desde pymongo,con un diccionario,por ejemplo:



1
2
3
4
5
6
datos = {
     "_id" : 3,  
     "value" : "Hola Mundo desde pymongo" 
}

coleccion.insert(datos)






Podemos hacer algo mejor:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
datos = [
   {
    "Nombre": "Perl",
    "Archivos": [".pl",".cgi"],
    "Modulos": "CPAN"
   },
   {
   "Nombre": "Python",
   "Archivos":[".py","pyo",".pyc"]
  "Modulos": ["easy_install","pip"]
   }
]


Ahí creamos dos diccionarios adentro de una lista.

Para ver las bases colecciones disponibles,podemos usar:

db.collection_names()

Por ejemplo para recorrer todas las colecciones de una db:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env python3

from pymongo import MongoClient

cliente = MongoClient()

db = cliente.test

for collection in db.collection_names():
    colecion = db[collection]
    print("Coleccion : %s\n\n") %(collection)
    print("Datos:\n")
    for i in colecion.find():
        print(i)
    print("\n\n")

Podemos hacer lo mismo con las bases de datos:

for dbs in cliente.database_names():
    print(dbs)

Si nos ponemos a pensar podemos ver todos los datos:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env python3

from pymongo import MongoClient

cliente = MongoClient()

for dbs in cliente.database_names():
    db = cliente[dbs]
    print("Base de datos %s\n") %(dbs)
    for collection in db.collection_names():
        colecion = db[collection]
        print("Coleccion : %s\n\nDatos:\n") %(collection)
        for i in colecion.find():
            print(i)
        print("\n\n")


Que mas podemos hacer?

Podemos borrar databases con la función drop y le pasamos como parámetro el nombre de la base de datos:
cliente.drop_database("test_database")

Podemos saber la informacion del sistema de esta manera:


1
2
3
4
info = cliente.server_info()

for k,v in info.items():
    print ("%s : %s ") %(k,v)

Y muchas cosas mas:

Podemos borrar una colección asi:

db.drop_collection("some_coll")

Podemos borrar los datos de una colección asi:

coleccion.remove({"value" : "foobar"})
Y mas,como supe esto,por la documentación claro,pero cuando no hay documentación y uno es autodidacta trabaja con lo que tiene a la mano,y podemos ver todas las funciones haciendo un dir sobre el objeto,eso es todo :D.

Documentación : api.mongodb.org/

3 comentarios:

  1. Genial!.

    Solo tengo una pregunta, vendra algun tuto haciendo uso de Sqlite?

    PD: Me suscribi al "Newsletter" y no me llegan las notificaciones al email cada vez que hay contenido nuevo, a que crees que se deba?

    Saludos!

    ResponderBorrar
  2. Sqlite solo lo he usado en Android y iOS, pero deja echarle una ojeada al modulo de python y hago un tutorial cuando lo maneje,sobre lo Newsletter no tengo ni idea :\.

    Saludos.

    ResponderBorrar
  3. No hay problema. En espera compa :D!

    Saludos!

    ResponderBorrar

Los comentarios serán revisados antes de ser publicados.