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 : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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 -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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!