搁置

注意: 不要靠货架自动关闭; 当你不再需要它时,总是明确地调用 close(),或者使用 shelve.open() 作为上下文管理器:

with shelve.open('spam') as db:
    db['eggs'] = 'eggs'

警告:

由于 shelve 模块由 pickle 支持,因此从不受信任的来源加载货架是不安全的。与 pickle 一样,加载架子可以执行任意代码。

限制

1 。选择使用哪个数据库包(例如 dbm.ndbm 或 dbm.gnu)取决于可用的接口。因此,使用 dbm 直接打开数据库是不安全的。数据库(不幸的是)也受到 dbm 的限制,如果使用的话 - 这意味着存储在数据库中的对象的(腌制表示)应该相当小,并且在极少数情况下,密钥冲突可能导致数据库拒绝更新。

2. 搁置模块不支持对搁置对象的并发读/写访问。 (多个同时读取访问是安全的。)当程序打开一个架子进行写入时,没有其他程序可以打开它进行读写。Unix 文件锁定可用于解决此问题,但这在 Unix 版本中有所不同,需要了解所使用的数据库实现。