Python + MongoDB = Pymongo

No Comments
Bueno , no hace mucho publiqué una introducción sobre MongoDB con sus características , primeros pasos y demas.
Bien , pues hoy trataré sobre un tema que a muchos Pythoneros como yo les interesa.

MongoDB cuenta con unos drivers que soportan una gran variedad de lenguajes :
  • C
  • C++
  • Erlang
  • Haskell
  • Java (and other JVM languages)
  • Javascript
  • .NET (C#, F#, PowerShell, ...)
  • Node.js
  • Perl
  • PHP
  • Python
  • Ruby
  • Scala
Para más información sobre los drivers : MongoDB Drivers

Uno de los más recomendados a la hora de tratar con MongoDB desde python es "Pymongo".

Primero debemos instalar la libreria pymongo , en mi caso uso mint asi que :
sudo apt-get install pymongo

Jugaremos con  los mismos comandos con pymongo que realizamos en la introducción a MongoDB :

- Conectaremos con la BD
- Veremos las BD's que tenemos creadas
- Veremos las colecciones que tenemos ya creadas
- Crearemos una nueva BD
- Crearemos  una nueva colección
- Insertaremos nuevos documentos
- Actualizaremos documentos
- Buscaremos documentos
- Borraremos documentos con remove y con drop

Y como petición especial (me enviarón la duda por MP) y ya que al parecer no puede esperar al próximo tutorial de MongoDB :

- Borraremos bases de datos

Bueno comenzemos importando pymongo :
from pymongo import Connection

Creamos la conexión con la BD :
conex = Connection('localhost') 

Ahí veís puse localhost por defecto porque la BD esta en nuestra PC y pymongo nos conecta con ella si le indicamos local pero ahi deberían de indicar el sitio de la BD y el puerto al que se conecta.

Bueno veamos las BD's que ya hay creadas :
conex.database_names()

Ahora creemos una BD nueva :
db = conex.nombredb

Creamos una nueva colección :
collect = db.coleccionnueva

Veamos que colecciones tenemos creadas :
db.collection_names()

Insertemos un documento :
collect.insert({"name":"sanko","twitter":"sankoSK"})

Actualizamos documentos con update():
collect.update()

Vamos a realizar una busqueda de documentos :
collect.find()

Borremos documentos con remove():
collect.remove()

Vaciamos la colección (borramos todos los documentos) con drop():
collect.drop()

Y ahora la petición especial , borrar bases de datos...

Aquí me explicaré un poquito más puesto que este comando es nuevo(No lo dimos en el post introductorio a MongoDB).

En MongoDB borrariamos la BD de la siguiente manera:
-Accedemos a la database
-Nos borramos
use nuestrabd
db.dropDatabase()

Una vez aclarado esto , veamos como borrariamos la bd en pymongo:
conex.drop_database('nombredatabase')

Bueno , ahora pongamos esto en práctica creando un código SIMPLE, no nos vamos a matar creando un super manager para un tutorial... xd

Algo así :

# Probaremos los codes , asi que los pondremos todos
# Coded by Sanko
# Haremos lo siguiente :
#  -Conectaremos con la BD
#  -Veremos las BD's que tenemos creadas
#  -Veremos las colecciones que ya tenemos creadas
#  -Crearemos una nueva BD
#  -Crearemos una nueva coleccion
#  -Insertaremos nuevos documentos
#  -Actualizaremos documentos
#  -Borraremos documentos con remove y drop

# Simple MongoDB-Manager using pymongo - Sanko

from pymongo import Connection

def mongomanager():

 conex = Connection('localhost')

 def databases():
  print "Control de BD's , Que deseas hacer?"
  entrada = raw_input("- [1]Visualizar BD's | [2]Crear BD's | [3]Borrar BD's | [4]Home -> ")
  if entrada == '1':
   var = conex.database_names()
   print var
   databases()
  elif entrada == '2':
   name = raw_input("Nombre de la BD que quieres crear -> ")
   global db 
   db = conex.name
   databases()
  elif entrada == '3':
   delname = raw_input("Nombre de la BD que quieres eliminar -> ")
   conex.drop_database(delname)
   databases()
  elif entrada == '4':
   mongomanager()
  else:
   print "Error\n"
   mongomanager()

 def collections():
  print "Control de Colecciones , que deseas hacer?"
  entrada = raw_input("- [1]Visualizar colecciones | [2]Crear coleccion | [3]Home -> ")
  if entrada == '1':
   var = db.collection_names()
   print var
   collections()
  elif entrada == '2':
   global collectname 
   collectname = raw_input("Nombre de la coleccion que quieres crear -> ")
   collect = db.collectname
   collections()
  elif entrada == '3':
   mongomanager()
  else:
   print "error\n"
   mongomanager()

 def documents():
  print "Control de Documentos , que deseas hacer?"
  entrada = raw_input("[1]Crear documento | [2]Busqueda de documentos | [3]Eliminar documento | [4]Home -> ")
  if entrada == '1':
   #Escriba el contenido de esta manera "name":"sanko" por ejemplo.
   document = raw_input("Escriba el contenido del doc => ")
   collectname.insert({"name":"sankito"})
   documents()
  elif entrada == '2':
   content = raw_input("Parametros del contenido -> ")
   var = collectname.find(content)
   print var
   documents()
  elif entrada == '3':
   choosedel = raw_input("Desea vaciar el documento(1) o borrar algo especifico(2) -> ")
   if choosedel == '1':
    collectname.drop()
    documents()
   elif choosedel == '2':
    delcontent = raw_input("Parametros del borrado -> ")
    collectname.remove(delcontent)
    documents()
   else:
    print "error\n"
    documents()
  else:
   print "error\n"
   mongomanager()

 entrada = raw_input("PyMongo Manager => Exit(0) | Control BD's(1) | Control Colecciones(2) | Control de Documentos(3) -> ")
 if entrada == '0':
  exit
 elif entrada == '1':
  databases()
 elif entrada == '2':
  collections()
 elif entrada == '3':
  documents()
 else:
  print "Error\n"
  mongomanager()

mongomanager() 

Una imagen del rápido testeo :



Para los vagos aca les dejo el code en Pastebin

El code esta creado muy rápidamente por eso tiene unos patrones muy rígidos a vuestra imaginación queda quitar lla necesidad de definir unas variables antes de crear el documento y demas cosas , eso ya se tiene que hacer pensando como sería más cómodo y dedicandole un buen rato.

Espero os sirviera este articulo , como siempre UN ABRAZO.
Saludos , Sanko

0 comentarios

Publicar un comentario en la entrada