python3教程:jsonpickle和sqlite3持久化存储字典对象
Posted Python热爱者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3教程:jsonpickle和sqlite3持久化存储字典对象相关的知识,希望对你有一定的参考价值。
在各种python的项目中,我们时常要持久化的在系统中存储各式各样的python的数据结构,常用的比如字典等。尤其是在云服务类型中的python项目中,要持久化或者临时的在缓存中储存一些用户认证信息和日志信息等,最典型的比如在数据库中存储用户的token信息。在本文中我们将针对三种类型的python持久化存储方案进行介绍,分别是json、pickle和python自带的数据库sqlite3。
使用json存储字典对象
json格式的数据存储也是云服务项目中常用的类型,具备十分轻量级和易使用的特性,这里我们展示一个案例:如何使用json格式存储一个用python产生的斐波那契数列。斐波那契数列中的每一个元素,都等于前一个数和前前一个数的和,即:
,而最常见的斐波那契数列的前两位数都是1。如下是一个产生斐波那契数列的python代码:
import json
number = 1:1, 2:1
for i in range(3, 11):
number[i] = number[i - 1] + number[i - 2]
print (number)
代码的执行结果如下:
[dechin@dechin-manjaro store_class]$ python3 json_dic.py
1: 1, 2: 1, 3: 2, 4: 3, 5: 5, 6: 8, 7: 13, 8: 21, 9: 34, 10: 55
我们可以从结果中看到,第10个斐波那契数是55。接下来我们来看看这样的一个字典,如何持久化的存储到json格式的文件中,以下是一个使用的示例:
import json
number = 1:1, 2:1
for i in range(3, 11):
number[i] = number[i - 1] + number[i - 2]
with open(number.json, w) as file:
json.dump(number, file)
with open(number.json, r) as file:
data = json.load(file)
print (data)
执行这个python文件,我们可以获得如下所示的输出:
[dechin@dechin-manjaro store_class]$ python3 json_dic.py
1: 1, 2: 1, 3: 2, 4: 3, 5: 5, 6: 8, 7: 13, 8: 21, 9: 34, 10: 55
这里我们发现在当前目录下产生了一个json的文件:
[dechin@dechin-manjaro store_class]$ ll
总用量 8
-rw-r--r-- 1 dechin dechin 265 3月 20 12:32 json_dic.py
-rw-r--r-- 1 dechin dechin 85 3月 20 12:32 number.json
我们可以看一下这个json文件中存储了什么样的数据:
[dechin@dechin-manjaro store_class]$ cat number.json
"1": 1, "2": 1, "3": 2, "4": 3, "5": 5, "6": 8, "7": 13, "8": 21, "9": 34, "10": 55
在验证了相关的数据已经被持久化存储了之后,同时我们也注意到一个问题,我们产生斐波那契数列的时候,索引1,2,3…
使用的是整型变量,但是存储到json格式之后,变成了字符串格式。我们可以使用如下的案例来说明这其中的区别:
import json
number = 1:1, 2:1
for i in range(3, 11):
number[i] = number[i - 1] + number[i - 2]
with open(number.json, w) as file:
json.dump(number, file)
with open(number.json, r) as file:
data = json.load(file)
print (data)
print (number[10])
print (data[10])
print (data[10])
执行的输出如下:
[dechin@dechin-manjaro store_class]$ python3 json_dic.py
1: 1, 2: 1, 3: 2, 4: 3, 5: 5, 6: 8, 7: 13, 8: 21, 9: 34, 10: 55
55
55
Traceback (most recent call last):
File "json_dic.py", line 16, in <module>
print (data[10])
KeyError: 10
这里的输出就有一个报错信息,这是因为我们使用了整型索引变量来寻找json存储的字典对象中对应的值,但是因为前面存储的时候这些整型的索引已经被转换成了字符串的索引,因此实际上在存储的对象中已经不存在整型的键值,所以执行结果会报错,而如果输入的是字符串类型的键值,则成功的找到了第10个斐波那契数。
使用pickle存储字典对象
关于斐波那契数列的信息,在上一章节中已经介绍,这里我们直接进入pickle的使用案例:
import pickle
number = 1:1, 2:1
for 使用 jsonpickle 从文件中保存和加载对象