7.2 shelve:对象的持久存储
不需要关系数据库时,可以用shelve模块作为持久存储Python对象的一个简单的选择。类似于字典,shelf按键访问。值将被腌制并写至由dbm创建和管理的数据库。
7.2.1 创建一个新shelf
使用shelve最简单的方法就是利用DbfilenameShelf类。它使用dbm存储数据。这个类可以直接使用,也可以通过调用shelve.open()来使用。
import shelve
with shelve.open('test_shelf.db') as s:
s['key1'] = {
'int':10,
'float':9.5,
'string':'Sample data',
}
要再次访问这个数据,可以打开shelf,并像字典一样使用它。
import shelve
with shelve.open('test_shelf.db') as s:
existing = s['key1']
print(existing)
运行这两个示例脚本生成以下输出。
dbm模块不支持多个应用同时写同一个数据库,不过它支持并发的只读客户。如果一个客户没有修改shelf,则可以通过传入flag='r’老告诉shelve以只读方式打开数据库。
import dbm
import shelve
with shelve.open('test_shelf.db',flag='r') as s:
print('Existing:',s['key1'])
try:
s['key1'] = 'new value'
except dbm.error as err:
print('ERROR: {}'.format(err))
如果数据库作为只读数据源打开,并且程序试图修改数据库,那么便会生成一个访问错误异常。具体的异常类型取决于创建数据库时dbm选择的数据库模块。
Linux下运行结果:
Windows下运行结果不同: