【发布时间】:2011-02-22 01:46:39
【问题描述】:
在数据库中存储和检索 python dict 的最佳方法是什么?
【问题讨论】:
标签: python string dictionary
在数据库中存储和检索 python dict 的最佳方法是什么?
【问题讨论】:
标签: python string dictionary
如果您对使用传统的 SQL 数据库(例如 MySQL)不是特别感兴趣,您可以查看文档自然映射到 Python 字典的非结构化文档数据库,例如 MongoDB。 MongoDB python bindings 允许您在数据库中插入字典,并根据字典中的值查询它们。例如下面的代码:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb=myclient["mydatabase"]
mycol = mydb["customers"]
mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)
并找到条目:
print(mycol.find_one({"name":"John"}))
【讨论】:
如果dict直接对应一个数据库表,那么你应该建立一个表,其模式包含两列-key和value。然后对于 dict 的每个元素,只需将其插入数据库,或者如果密钥已经到位,则更新它等。
否则您可以使用pickle 将字典序列化为字符串,然后您可以将字符串保存到数据库中。但总的来说,我不会推荐这种解决方案,因为您无法查询序列化数据。
【讨论】:
“最佳”值得商榷。
如果你需要一个 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)]
【讨论】:
相当模糊的问题,很大程度上取决于用例。
通常您只需将其序列化并将其插入任何需要的地方,但如果您需要 dict 本身“类似于数据库”,那么您可以使用 many of the available key/value stores for Python 之一
【讨论】: