sábado, 12 de julio de 2014

Insertar documentos en Mongodb usando Python y pymongo

Mongodb es una base de datos no relacional (NoSQL) que permite la escalabilidad (Big Data) y que ha sido adoptada por empresas reconocidas como Cisco, Codecademy, eBay, Forbes y SAP. 

Pymongo es el driver con el que se puede conectar a Python con Mongodb. Una ventaja de Mongodb es que maneja documentos json equivalentes a diccionarios en Python. Una ejemplo de cómo insertar documentos en la base de datos mongo a través de Python puede ilustrarse usando la página "http://media.mongodb.org/zips.json" que presenta una colección de códigos postales de Estados Unidos del tipo:


{

"_id": "10280",

"city": "NEW YORK",

"state": "NY",

"pop": 5574,

"loc": [

-74.016323,

40.710537

]

}

Los pasos para insertar el documento son los siguientes:



  1. >>> import urllib2
  2. >>> import pymongo
  3. >>> coneccion = pymongo.MongoClient("localhost", 27017)  #Establecemos la                                                                  #conección con mongo
  4. >>> db = coneccion.zipcodes          #La base de datos se llama zipcodes
  5. >>> datos = db.zip                   #La coleccion de documentos se llama zip
  6. >>> url = "http://media.mongodb.org/zips.json"  #De esta página extraemos los                                                                 #datos json
  7. >>> doc = urllib2.urlopen(url)                  #Abrimos la página
  8. >>> for line in doc:
  9.         datos.insert(eval(line))  #Recorremos cada línea, la convertimos en                                                           #diccionario y
  10.                                   #la insertamos en la colección zip


Ahora si entramos a la linea de comados de mongo podemos comprobar que existe la base de datos y la colección. Y podemos usar los comandos de búsqueda de mongodb:

  1. C:\Users>mongo
  2. MongoDB shell version: 2.4.8
  3. connecting to: test
  4. > show dbs
  5. datoszip        0.203125GB
  6. reddit  0.203125GB
  7. test    0.203125GB
  8. > use datoszip
  9. switched to db datoszip
  10. > show collections
  11. system.indexes
  12. zip
  13. > db.zip.findOne()
  14. {
  15.         "_id" : "01001",
  16.         "city" : "AGAWAM",
  17.         "state" : "MA",
  18.         "pop" : 15338,
  19.         "loc" : [
  20.                 -72.622739,
  21.                 42.070206
  22.         ]
  23. }
  24. > db.zip.find({city:'SEATTLE'}).limit(2).pretty()
  25. {
  26.         "_id" : "98101",
  27.         "city" : "SEATTLE",
  28.         "state" : "WA",
  29.         "pop" : 5801,
  30.         "loc" : [
  31.                 -122.330456,
  32.                 47.611435
  33.         ]
  34. }
  35. {
  36.         "_id" : "98102",
  37.         "city" : "SEATTLE",
  38.         "state" : "WA",
  39.         "pop" : 19000,
  40.         "loc" : [
  41.                 -122.320993,
  42.                 47.63025
  43.         ]
  44. }

No hay comentarios.:

Publicar un comentario