11.6. anydbm-对 DBM 样式数据库的通用访问

Note

在 python 3 中,anydbm模块已重命名为dbm。在将源转换为 python 3 时,2to3工具将自动适应导入。

anydbm是 DBM 数据库变体dbhash(需要bsddb),gdbmdbm的通用接口。如果未安装这些模块,则将使用模块dumbdbm中的缓慢但简单的实现。

  • anydbm. open(* filename * [,* flag * [,* mode *]])
    • 打开数据库文件文件名并返回相应的对象。

如果数据库文件已经存在,则使用whichdb模块确定其类型,并使用适当的模块;如果不存在,则使用上面列出的第一个可以导入的模块。

可选的* flag *参数必须是以下值之一:

ValueMeaning
'r'打开现有数据库以只读(默认)
'w'打开现有数据库进行读写
'c'打开数据库进行读写,如果不存在则创建数据库
'n'始终创建一个新的空数据库,以供读取和写入

如果未指定,则默认值为'r'

可选的* mode *参数是文件的 Unix 模式,仅在必须创建数据库时使用。它的默认值为八进制的0666(并且会被当前的 umask 修改)。

  • exception anydbm. error
    • 一个 Tuples,其中包含每个受支持模块均可引发的异常,并且唯一异常也称为anydbm.error作为第一项,而引发anydbm.error则使用后者。

open()返回的对象支持与字典相同的大多数Function;键及其对应的值可以存储,检索和删除,并且has_key()keys()方法可用。键和值必须始终是字符串。

以下示例记录了一些主机名和相应的标题,然后打印出数据库的内容:

import anydbm

# Open database, creating it if necessary.
db = anydbm.open('cache', 'c')

# Record some values
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'

# Loop through contents.  Other dictionary methods
# such as .keys(), .values() also work.
for k, v in db.iteritems():
    print k, '\t', v

# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4

# Close when done.
db.close()

除了类似于字典的方法外,anydbm对象还提供以下方法:

  • anydbm. close ( )
    • 关闭anydbm数据库。

See also

  • Module dbhash

  • BSD db数据库接口。

  • Module dbm

  • 标准 Unix 数据库接口。

  • Module dumbdbm

  • dbm接口的可移植实现。

  • Module gdbm

  • GNU 数据库接口,基于dbm接口。

  • Module shelve

  • 构建在 Python dbm接口之上的常规对象持久性。

  • Module whichdb

  • Util 模块,用于确定现有数据库的类型。