2010-05-20 20 views

risposta

4

Una domanda abbastanza vaga dipende molto dai casi d'uso.

In genere si era appena serializzare e inserirla laddove è stato necessario, ma se avete bisogno di dict si lascia "del database-like", allora è possibile utilizzare uno dei many of the available key/value stores for Python

4

Se il dict corrisponde direttamente in una tabella di database, è necessario impostare una tabella con uno schema contenente due colonne: key e value. Quindi per ogni elemento del dict, basta inserirlo nel database o aggiornarlo se la chiave è già in posizione, ecc.

Altrimenti si potrebbe usare pickle per serializzare il dict su una stringa, e quindi si potrebbe semplicemente salva la stringa nel DB. Ma in generale non consiglierei questa soluzione dato che non è possibile interrogare i dati serializzati.

14

Se non si è specificamente interessati all'utilizzo di un database SQL tradizionale, ad esempio MySQL, è possibile esaminare database di documenti non strutturati in cui i documenti vengono mappati naturalmente a dizionari Python, ad esempio MongoDB. Il MongoDB python bindings consente di inserire solo dicts nel DB e interrogarli in base ai valori nel dict. Si veda ad esempio il codice di seguito dal 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. Come cool! Grazie per l'esempio. – bernie

+0

heh, sì, è abbastanza bello;). Recentemente ho iniziato a giocare con MongoDB ed è davvero carino visto che il modello di documento è basato su Binary JSON. Dato che sto suonando come una pubblicità qui, c'è persino un servizio di hosting online gratuito (gratuito per 16 MB): https://mongohq.com/home: p – catchmeifyoutry

6

"Best" è discutibile.
Se è necessario un DBMS, sqlite è integrato; quindi potrebbe essere considerato un metodo più semplice rispetto ad altri modi menzionati.

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)] 
Problemi correlati