Python,在数据库中存储字典
相当模糊的问题,很大程度上取决于用例。
通常你只会序列化,并插入它能够满足需求,但如果你需要的字典本身是“数据库样”,那么你可以使用的many of the available key/value stores for Python
一个。如果字典直接对应到一个数据库表,那么你应该建立一个包含两列的模式的表格 - key
和value
。然后对于字典的每个元素,只需将其插入到数据库中,或者在密钥已经存在的情况下进行更新等。
否则,您可以使用pickle将字典序列化为字符串,然后您可以将字符串保存到数据库。但总的来说,我不会推荐这个解决方案,因为你不能查询序列化的数据。
如果您对使用传统SQL数据库(如MySQL)没有特别兴趣,可以查看非结构化文档数据库,其中文档自然映射到python词典,例如MongoDB。 MongoDB python bindings允许您在数据库中插入字典,并根据字典中的值查询它们。请参阅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']}
+1。挺酷的!感谢这个例子。 – bernie 2010-05-20 20:29:25
嘿,是的,它很酷;)。我最近开始使用MongoDB进行游戏,它非常好,因为它的文档模型基于Binary JSON。由于我在这里听起来像商业广告,所以甚至有一个免费的在线托管服务(free for 16MB):https://mongohq.com/home:p – catchmeifyoutry 2010-05-20 20:42:52
“最佳”值得商榷。
如果你需要一个DBMS,sqlite是内置的;所以它可能被认为比一些其他提到的方法更容易。
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)]
除了序列化它? – 2010-05-20 20:08:40