- Python数据持久化教程
 - Python 数据持久化 - 主页
 - Python 数据持久化 - 简介
 - Python 数据持久化 - 文件 API
 - 使用 os 模块进行文件处理
 - Python数据持久化——对象序列化
 - Python 数据持久化 - Pickle 模块
 - Python 数据持久化 - Marshal 模块
 - Python数据持久化——Shelve模块
 - Python数据持久化——dbm包
 - Python 数据持久化 - CSV 模块
 - Python 数据持久化 - JSON 模块
 - Python 数据持久性 - XML 解析器
 - Python 数据持久化 - Plistlib 模块
 - Python数据持久化-Sqlite3模块
 - Python 数据持久化 - SQLAlchemy
 - Python 数据持久化 - PyMongo 模块
 - Python 数据持久化 - Cassandra 驱动程序
 - 数据持久化-ZODB
 - 数据持久化 - Openpyxl 模块
 - Python 数据持久性资源
 - Python 数据持久化 - 快速指南
 - Python 数据持久性 - 有用资源
 - Python 数据持久化 - 讨论
 
Python数据持久化——Shelve模块
Python标准库中的shelve模块提供了简单而有效的对象持久化机制。该模块中定义的架子对象是类似字典的对象,持久存储在磁盘文件中。这将创建一个类似于 UNIX 类系统上的 dbm 数据库的文件。
架子词典有一定的限制。在这个特殊的字典对象中,只有字符串数据类型可以用作键,而任何可picklable Python对象都可以用作值。
shelve 模块定义了三个类,如下 -
| 先生编号 | 搁架模块及描述 | 
|---|---|
| 1 | 
 架子 这是架实现的基类。它是用类似字典的对象初始化的。  | 
| 2 | 
 BsdDb架子 这是 Shelf 类的子类。传递给其构造函数的 dict 对象必须支持first()、next()、previous()、last() 和set_location() 方法。  | 
| 3 | 
 数据库文件名Shelf 这也是 Shelf 的子类,但接受文件名作为其构造函数的参数,而不是 dict 对象。  | 
shelve 模块中定义的 open() 函数返回DbfilenameShelf对象。
open(filename, flag='c', protocol=None, writeback=False)
文件名参数被分配给创建的数据库。标志参数的默认值为“c”,用于读/写访问。其他标志是“w”(只写)、“r”(只读)和“n”(新的读/写)。
序列化本身由 pickle 协议控制,默认为无。最后一个参数写回参数默认为 false。如果设置为 true,则缓存访问的条目。每次访问都会调用sync()和close()操作,因此过程可能会很慢。
以下代码创建一个数据库并在其中存储字典条目。
import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()
这将在当前目录中创建 test.dir 文件并以哈希形式存储键值数据。Shelf 对象有以下可用方法 -
| 先生。 | 方法与说明 | 
|---|---|
| 1 | 
 关闭() 同步并关闭持久 dict 对象。  | 
| 2 | 
 同步() 如果在写回设置为 True 的情况下打开架子,则写回缓存中的所有条目。  | 
| 3 | 
 得到() 返回与键关联的值  | 
| 4 | 
 项目() 元组列表 – 每个元组都是键值对  | 
| 5 | 
 键() 货架钥匙列表  | 
| 6 | 
 流行音乐() 删除指定的key并返回对应的值。  | 
| 7 | 
 更新() 从另一个字典/可迭代更新架子  | 
| 8 | 
 值() 货架价值清单  | 
访问架子中特定键的值 -
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')]