python-05 持久化模块

python-05 持久化模块

1、对象持久化

1)临时性对象

  类创建的对象并不是真正的数据库记录,它存储在内存而不是文件中,当你关闭python,实例将消失;

2)对象持久化

  对象在创建它们的程序退出之后依然存在;

3)标准库模块

1
2
3
pickle 	#任意Python对象格式化和解格式化(编码、解码)
dbm #实现一个可通过键访问的文件系统,以存储字节串
shelve #按照键把pickle处理后的对象存储到一个文件中

2、构造数据库

shelve模块

  shelve模块提供基本的存储操作,通过构造一个简单的数据库, 像操作字典一样按照键存储和获取本地的Python对象,使其可以跨程序运行而保持持久化。

1)键:必须是字符串,且是唯一的;

2)值:任何类型的Python对象;

3)与字典类型的区别:一开始必须打开shelve,并且在修改后需要关闭;

4)数据处理:不支持类似SQL的查询工具,但只要通过键获取到保存在文件的对象,就可以像正常的数据对象一样处理;

3、常用操作

1)将任何数据对象,保存到文件中去;

1
d = shelve.open(filename) 		#open函数在调用时返回一个shelf对象,通过该对象可以存储内容

2)类似字典形式访问,可读可写 ;

1
2
3
d[key] = data          #写数据
value = d[key] #读数据
del d[key] #删除数据

3)操作完成后,记得关闭文件

1
d.close()

4)实例

1
2
3
4
5
6
7
8
9
#程序1中写入
import shelve
s = shelve.open('test_shelf.db') #

s['kk'] = {'size': 20, 'color': 'blue', 'weight': 6}
s['MM'] = [1, 2, 3]
s['name']='Tom'

s.close()

运行完程序,然后可以看到本地文件夹多出来几个文件:

1JcGoq.png

1
2
3
4
5
6
7
8
9
#在另一个程序读取刚刚写入的内容
import shelve
s = shelve.open('test_shelf.db')
a=s['name']
s.close()
print(a)

#运行结果
Tom
1
2
3
4
5
6
7
8
9
10
11
#在另一个程序读取刚刚写入的key
import shelve
s1 = shelve.open('test_shelf.db')
for key in s1:
print(key)
s1.close()

#运行结果
kk
MM
name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#存进shelve里面的列表对象、字符串等,进行append操作不报错但是无效,相当于白做。
import shelve
s = shelve.open('test_shelf.db')
s['MM'].append(100)
a=s['MM']
s.close()
print(a)


#运行结果
[1, 2, 3]



#正确方法是将shelve对象提取出来进行append操作,完事后存回去
import shelve
s = shelve.open('test_shelf.db')
a=s['MM']
a.append(100)
s['MM']=a
s.close()

s = shelve.open('test_shelf.db')
a=s['MM']
s.close()
print(a)

#运行结果
[1, 2, 3, 100]
欢迎打赏,谢谢
------ 本文结束------
0%