Python,在数据库中存储字典

问题描述:

什么是在数据库中存储和检索python字典的最佳方式?Python,在数据库中存储字典

+1

除了序列化它? – 2010-05-20 20:08:40

相当模糊的问题,很大程度上取决于用例。

通常你只会序列化,并插入它能够满足需求,但如果你需要的字典本身是“数据库样”,那么你可以使用的many of the available key/value stores for Python

一个。如果字典直接对应到一个数据库表,那么你应该建立一个包含两列的模式的表格 - keyvalue。然后对于字典的每个元素,只需将其插入到数据库中,或者在密钥已经存在的情况下进行更新等。

否则,您可以使用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']} 
+0

+1。挺酷的!感谢这个例子。 – bernie 2010-05-20 20:29:25

+0

嘿,是的,它很酷;)。我最近开始使用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)]