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直接对应一个数据库表,那么你应该建立一个表,其模式包含两列-keyvalue。然后对于 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持久化存储字典对象

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

Python读取Excel表格数据并以字典dict格式存储

python基础数据类型一(字典)

在腌制字典中检索单个对象的问题(Python 3)

在python字典中存储bytestring