Python数据持久化 Shelve模块

Python数据持久化 Shelve模块

Python标准库中的shelve模块提供了简单而有效的对象持久化机制。在这个模块中定义的shelf对象是类似字典的对象,它被持久化地存储在一个磁盘文件中。这创建了一个类似于 UNIX 系统上的 dbm 数据库的文件。

货架上的字典有一些限制。在这个特殊的字典对象中,只有字符串数据类型可以作为键,而任何可拾取的 Python 对象可以作为值。

货架模块定义了三个类,如下所示

序号 货架模块和描述
1 Shelf 这是货架实现的基类。它被初始化为类似dict的对象。
2 BsdDbShelf 这是Shelf类的一个子类。传递给它的构造函数的dict对象必须支持first(), next(), previous(), last()和set_location()方法。
3 DbfilenameShelf 这也是Shelf的一个子类,但是接受一个文件名作为其构造函数的参数而不是dict对象。

在shelve模块中定义的open()函数返回一个 DbfilenameShelf 对象。

open(filename, flag='c', protocol=None, writeback=False)

文件名参数被分配给创建的数据库。标志参数的默认值是’c’,用于读/写访问。其他标志是’w’(只写)’r’(只读)和’n’(带读/写的新)。

序列化本身由pickle协议管理,默认为无。最后一个参数writeback参数默认为false。如果设置为true,被访问的条目会被缓存起来。每次访问都会调用sync()和close()操作,因此过程可能很慢。

下面的代码创建了一个数据库并在其中存储了字典条目。

import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()

这将在当前目录下创建test.dir文件并以散列形式存储键值数据。货架对象有以下方法可用

序号 方法和描述
1 close() 同步并关闭持久化的dict对象。
2 sync() 写回缓存中的所有条目,如果架子被打开时写回设置为True。
3 get() 返回与键相关的值
4 items() 图元的列表 – 每个图元是键值对
5 keys() 架子上的键的列表
6 pop() 删除指定的键并返回相应的值。
7 update() 从另一个dict/iterable更新书架
8 values() 货架上的值的列表

要访问货架中某一特定键的值:

s=shelve.open('test')
print (s['age']) #this will print 23
   s['age']=25
print (s.get('age')) #this will print 25
s.pop('marks') #this will remove corresponding k-v pair

如同内置的字典对象,items()、keys()和values()方法返回视图对象。

print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]  

print (list(s.keys()))
['name', 'age', 'marks']

print (list(s.values()))
['Ajay', 25, 75]

使用update()方法将另一个字典的项目与货架合并。

d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))

[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程