Python,将字典存储在数据库中

16 投票
4 回答
26020 浏览
提问于 2025-04-15 22:57

在数据库中存储和获取一个Python字典(dict)最好的方法是什么?

4 个回答

4

如果这个字典(dict)直接对应到一个数据库表,那你应该创建一个包含两个列的表,分别是 keyvalue。然后,对于字典中的每一个元素,只需把它插入到数据库中,如果这个键已经存在了,就更新它,等等。

如果不是这样的话,你可以使用 pickle 把字典转换成字符串,然后把这个字符串保存到数据库里。但一般来说,我不太推荐这种方法,因为你无法对这些序列化的数据进行查询。

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)]
19

如果你对传统的SQL数据库,比如MySQL,没什么特别的兴趣,可以考虑使用非结构化的文档数据库。这种数据库里的文档可以很自然地对应到Python中的字典,比如说MongoDB。MongoDB的Python接口让你可以直接把字典插入到数据库中,并根据字典里的值来查询数据。下面的代码就是一个例子:

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"}))

撰写回答