Python 与 Unix 数据库 (dbm) 的接口
Python 内置库中的 dbm 包提供了类似 DBM 风格数据库接口的字典。dbm 库是 Ken Thompson 编写的简单数据库引擎。DBM 代表 UNIX 操作系统使用的数据库管理器,该库使用单个键(主键)在固定大小的存储桶中存储任意数据,并使用哈希技术通过键快速检索数据。
dbm 包 − 中有以下模块
dbm.ndbm 模块提供了与 Unix “(n)dbm” 库的接口。Dbm 对象的行为类似于字典,其键和值应存储为字节。该模块不支持 items() 和 values() 方法。
dbm.dumb 模块提供了一个持久的字典式接口,该接口完全用 Python 编写。与其他模块(如 dbm.gnu)不同,它不需要外部库。与其他持久映射一样,键和值始终以字节形式存储。
这些模块由 Python 的 shelve 模块内部使用。与 shelve 数据库的情况一样,用户指定的数据库名称带有".dir"后缀。dbm 对象的 whichdb() 函数告知当前 Python 安装中可用的 dbm 实现。
>>> dbm.whichdb('mydbm.db')
'dbm.dumb'
>>> db = dbm.open('mydbm.db','n') >>> db['name'] = Rajani Deshmukh' >>> db['address'] = 'Shivajinagar Pune' >>> db['PIN'] = '431001' >>> db.close()
open() 函数允许模式这些标志 −
值 | 含义 |
---|---|
'r' | 打开现有数据库以仅供读取(默认) |
'w' | 打开现有数据库以进行读写 |
'c' | 打开数据库以进行读写,如果不存在则创建它 |
'n' | 始终创建一个新的空数据库,并打开以供读写 |
dbm 对象是一个类似对象的字典,就像一个 shelf 对象。因此,可以执行所有字典操作。dbm 对象可以调用 get()、pop()、append(0 和 update() 方法。以下代码使用 'r' 标志打开 'mydbm.db' 并遍历键值对集合。
>>> db = dbm.open('mydbm.db','r') >>> for k,v in db.items(): print (k,v) b'name' : Rajani Deshmukh' b'address' : b'Shivajinagar Pune' b'PIN' : b'431001'
dbm 对象还提供以下方法 −
sync():同步磁盘目录和数据文件。此方法由 Shelve.sync() 方法调用。
close():关闭 dbm 数据库。
gnu dbm 对象具有以下方法 −
firstkey()
使用此方法和 nextkey() 方法可以循环遍历数据库中的每个键。此方法返回起始键。
gdbm.nextkey(key):返回遍历中跟在 key 后面的键。
gdbm.reorganize():此函数将重新组织数据库。除非使用这种重组,否则 gnu dbm 对象不会缩短数据库文件的长度;否则,已删除的文件空间将被保留并在添加新的(键,值)对时重新使用。