Python,将dict存储在数据库中

时间:2010-05-20 20:07:39

标签: python string dictionary

在数据库中存储和检索python dict的最佳方法是什么?

4 个答案:

答案 0 :(得分:15)

如果您对使用传统的SQL数据库(如MySQL)不感兴趣,可以查看非结构化文档数据库,其中文档自然映射到python词典,例如MongoDB。 MongoDB python bindings允许您只在数据库中插入dicts,并根据dict中的值查询它们。例如,请参阅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 :(得分:6)

“最好”是值得商榷的 如果你需要一个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)]

答案 2 :(得分:4)

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

通常,您只需对其进行序列化并将其插入需要的位置,但如果您需要将dict本身设置为“类似数据库”,则可以使用many of the available key/value stores for Python中的一个

答案 3 :(得分:4)

如果dict直接对应于数据库表,那么您应该设置一个包含两列的模式的表 - keyvalue。然后,对于dict的每个元素,只需将其插入数据库,或者如果密钥已经就位,则更新它等等。

否则,您可以使用pickle将字典串行化为字符串,然后您可以将字符串保存到数据库中。但总的来说,我不建议使用此解决方案,因为您无法查询序列化数据。