Python,将字典存储在数据库中
Posted
技术标签:
【中文标题】Python,将字典存储在数据库中【英文标题】:Python, store a dict in a database 【发布时间】:2011-02-22 01:46:39 【问题描述】:在数据库中存储和检索 python dict 的最佳方法是什么?
【问题讨论】:
【参考方案1】:如果您对使用传统的 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"))
【讨论】:
嘿,是的,这很酷;)。我最近开始使用 MongoDB,它非常好,因为它的文档模型基于二进制 JSON。由于我在这里听起来像是广告,甚至还有免费的在线托管服务(免费为 16MB):mongohq.com/home :p mongo 最多存储一个深度为 100 的字典【参考方案2】:如果dict直接对应一个数据库表,那么你应该建立一个表,其模式包含两列-key
和value
。然后对于 dict 的每个元素,只需将其插入数据库,或者如果密钥已经到位,则更新它等。
否则您可以使用pickle 将字典序列化为字符串,然后您可以将字符串保存到数据库中。但总的来说,我不会推荐这种解决方案,因为您无法查询序列化数据。
【讨论】:
【参考方案3】:“最佳”值得商榷。 如果你需要一个 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)]
【讨论】:
【参考方案4】:相当模糊的问题,很大程度上取决于用例。
通常您只需将其序列化并将其插入任何需要的地方,但如果您需要 dict 本身“类似于数据库”,那么您可以使用 many of the available key/value stores for Python 之一
【讨论】:
以上是关于Python,将字典存储在数据库中的主要内容,如果未能解决你的问题,请参考以下文章
python3教程:jsonpickle和sqlite3持久化存储字典对象