2010-05-20 10 views

Respuesta

4

Pregunta bastante vaga, depende mucho de los casos de uso.

Normalmente usted acaba de serializarlo e insertarlo donde fuera necesario, pero si usted necesita el dict a sí misma como "base de datos-como", entonces usted puede utilizar una de many of the available key/value stores for Python

4

Si el dict corresponde directamente En una tabla de base de datos, debe configurar una tabla con un esquema que contenga dos columnas: key y value. Luego, para cada elemento del dict, simplemente insértelo en la base de datos o actualícelo si la clave ya está en su lugar, etc.

De lo contrario, podría usar pickle para serializar el dict a una cadena, y luego podría simplemente guarda la cadena en la base de datos. Pero, en general, no recomendaría esta solución ya que no puede consultar los datos serializados.

14

Si no está específicamente interesado en utilizar una base de datos SQL tradicional, como MySQL, podría buscar en las bases de datos de documentos no estructurados donde los documentos se asignan naturalmente a los diccionarios python, por ejemplo MongoDB. El MongoDB python bindings le permite simplemente insertar dictados en el DB y consultarlos en función de los valores del dict. Véase por ejemplo el código de abajo de la tutorial:

>>> from pymongo import Connection 
>>> connection = Connection() 
>>> db = connection['test-database'] 
>>> import datetime 
>>> post = {"author": "Mike", 
...   "text": "My first blog post!", 
...   "tags": ["mongodb", "python", "pymongo"], 
...   "date": datetime.datetime.utcnow()} 
>>> posts = db.posts 
>>> posts.insert(post) 
ObjectId('...') 
>>> posts.find_one({"author": "Mike"}) 
{u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']} 
+0

+1. ¡Que guay! Gracias por el ejemplo. – bernie

+0

je, sí, es genial;). Recientemente comencé a jugar con MongoDB y es bastante agradable ya que su modelo de documento se basa en Binary JSON. Ya que estoy sonando como un comercial aquí, diablos hay incluso un servicio gratuito de alojamiento en línea (gratis por 16 MB): https://mongohq.com/home: p – catchmeifyoutry

6

"mejor" es discutible.
Si necesita un DBMS, sqlite está integrado; por lo que podría considerarse un método más fácil que algunas de las otras formas mencionadas.

import sqlite3 
conn = sqlite3.connect(':memory:') 
c = conn.cursor() 
c.execute("create table kv (key text, value integer);") 
# <sqlite3.Cursor object at 0x00C62CE0> 
d = {'a':1,'b':2} 
c.executemany("insert into kv values (?,?);", d.iteritems()) 
# <sqlite3.Cursor object at 0x00C62CE0> 
c.execute("select * from kv;").fetchall() 
# [(u'a', 1), (u'b', 2)] 
Cuestiones relacionadas