shelve — Python object persistence
‘shelf’是一个保存的,像字典的对象。它与‘dbm’数据库不同的是在shelf中的值(不是键)可以是随意的Python对象——pickle模块可以处理他们。它包括大部分的类实例,可迭代数据类型和有许多子对象的对象。键值通常为字符串。
shelve.open(filename, flag=’c’, protocol=None, writeback=False)
打开一个persistent dictionary。被指定的filename是位于数据库下的基础文件名。就像边际效应一样,扩展会被加到文件名中并且不止一个文件会被创建。通常,打开数据库下的文件是用来读写的。可选参数flag与dbm.open()中的参数flag是一样的。
默认,版本3中的pickle是用来序列化值的。pickle的版本协议可以用参数protocol来指定。
因为Python的语义,当一个易变的persistent-dictionary入口被修改时shelf是无法知道的。当分配到shelf时默认修改对象只能被写(见例子)。若可选参数writeback设置为True,所有访问入口都被存在高速内存中,通过函数sync()和close()进行回退操作;这会造成改变persistent dictionary的易变入口操作变困难,耗费巨大的内存容量,使关闭操作变得缓慢。
注意:不要依赖于shelf的自动关闭;但你不需要shelf或使用shelve.open()作为内容管理工具时你最好显式地调用close()函数。
with shelve.open('spam') as db:
db['eggs'] = 'eggs'