Python + MongoDB = Pymongo

Iniciado por Sanko, Diciembre 20, 2012, 11:12:49 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

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 : You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
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:
Código: python
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 :
Código: python
from pymongo import Connection


Creamos la conexión con la BD :
Código: python
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 :

Código: python
db = conex.nombredb


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


Veamos que colecciones tenemos creadas :
Código: python
db.collection_names()


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


Actualizamos documentos con update():
Código: python
collect.update()


Vamos a realizar una busqueda de documentos :
Código: python
collect.find()


Borremos documentos con remove():
Código: python
collect.remove()


Vaciamos la colección (borramos todos los documentos) con drop():
Código: python
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


Código: python
use nuestrabd
db.dropDatabase()


Una vez aclarado esto , veamos como borrariamos la bd en pymongo:
Código: python
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í :
Código: python

# 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 -> You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

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
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Excelente Sanko!! Esta buenisimo! muchas gracias!