11.9. gdbm — GNU 对 dbm 的重新解释 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/gdbm
跳转至:导航、​搜索

11.9. 数据库 — GNU 对 dbm 的重新解释

笔记

gdbm 模块已在 Python 3 中重命名为 dbm.gnu2to3 工具将在将您的源代码转换为 Python 3 时自动调整导入。


该模块与 dbm 模块非常相似,但使用 gdbm 来提供一些附加功能。 请注意,gdbmdbm 创建的文件格式不兼容。

gdbm 模块提供了一个到 GNU DBM 库的接口。 gdbm 对象的行为类似于映射(字典),除了键和值始终是字符串。 打印 gdbm 对象不会打印键和值,并且不支持 items()values() 方法。

该模块定义了以下常量和函数:

exception gdbm.error
引发 gdbm 特定错误,例如 I/O 错误。 KeyError 针对一般映射错误(例如指定不正确的密钥)而引发。
gdbm.open(filename[, flag[, mode]])

打开一个 gdbm 数据库并返回一个 gdbm 对象。 filename 参数是数据库文件的名称。

可选的 flag 参数可以是:

价值

意义

'r'

以只读方式打开现有数据库(默认)

'w'

打开现有数据库进行读写

'c'

打开数据库进行读写,如果不存在则创建

'n'

总是创建一个新的、空的数据库,以读写方式打开

可以将以下附加字符附加到标志以控制数据库的打开方式:

价值

意义

'f'

以快速模式打开数据库。 对数据库的写入不会同步。

's'

同步模式。 这将导致对数据库的更改立即写入文件。

'u'

不要锁定数据库。

并非所有标志都对 gdbm 的所有版本都有效。 模块常量 open_flags 是一串支持的标志字符。 如果指定了无效标志,则会引发异常 error

可选的 mode 参数是文件的 Unix 模式,仅在必须创建数据库时使用。 默认为八进制 0666

除了类似字典的方法,gdbm 对象还有以下方法:

gdbm.firstkey()
可以使用此方法和 nextkey() 方法遍历数据库中的每个键。 遍历按 gdbm 的内部哈希值排序,不会按键值排序。 此方法返回起始密钥。
gdbm.nextkey(key)

返回遍历中 key 后面的键。 以下代码打印数据库 db 中的每个键,而无需在内存中创建包含所有键的列表:

k = db.firstkey()
while k != None:
    print k
    k = db.nextkey(k)
gdbm.reorganize()
如果您进行了大量删除并希望缩小 gdbm 文件使用的空间,则此例程将重新组织数据库。 gdbm 除非使用这种重组,否则不会缩短数据库文件的长度; 否则,删除的文件空间将被保留并在添加新的(键,值)对时重新使用。
gdbm.sync()
当以快速模式打开数据库时,此方法会强制将任何未写入的数据写入磁盘。
gdbm.close()
关闭 gdbm 数据库。

也可以看看

模块anydbm
dbm 样式数据库的通用接口。
模块whichdb
用于确定现有数据库类型的实用程序模块。