11.11. bsddb-Berkeley 数据库库的接口

自 2.6 版起弃用:bsddb模块已在 Python 3 中删除。

bsddb模块提供了 Berkeley 数据库库的接口。用户可以使用适当的打开调用来创建基于哈希,btree 或记录的库文件。 Bsddb 对象的行为通常像字典。键和值必须是字符串,因此,要将其他对象用作键或存储其他类型的对象,用户必须以某种方式序列化它们,通常使用marshal.dumps()pickle.dumps()

bsddb模块要求使用 4.0 到 4.7 之间的 Berkeley DB 库版本。

See also

bsddb.db模块中提供了更现代的 DB,DBEnv 和 DBSequence 对象接口,该接口与上述 URL 中记录的 Berkeley DB C API 非常匹配。 bsddb.db API 提供的其他Function包括微调,事务,日志记录和多进程并发数据库访问。

以下是与旧的 Python bsddb 模块兼容的旧版bsddb接口的说明。从 Python 2.5 开始,此接口对于多线程访问应该是安全的。建议bsddb.db API 用于线程用户,因为它提供了更好的控制。

bsddb模块定义了以下函数,这些函数创建用于访问适当类型的 Berkeley DB 文件的对象。每个函数的前两个参数相同。为了便于移植,在大多数情况下仅应使用前两个参数。

  • bsddb. hashopen(* filename * [,* flag * [,* mode * [,* pgsize * [,* ffactor * [,* nelem * [,* cachesize * [,* lorder * [,* hflags *]]]]] ]]]]))

    • 打开名为* filename 的哈希格式文件。可以pass传递None作为 filename 来创建从不打算保留在磁盘上的文件。可选的 flag *标识用于打开文件的模式。它可以是'r'(只读),'w'(读写),'c'(读写-必要时创建;默认值)或'n'(读写-截短为零长度)。其他参数很少使用,只是传递给低级dbopen()函数。有关其用法和解释,请查阅 Berkeley DB 文档。
  • bsddb. btopen(* filename * [,* flag * [,* mode * [,* btflags * [,* cachesize * [,* maxkeypage * [,* minkeypage * [,* pgsize * [,* lorder *]]]]] ]]]]))

    • 打开名为* filename 的 btree 格式文件。可以pass传递None作为 filename 来创建从不打算保留在磁盘上的文件。可选的 flag *标识用于打开文件的模式。它可以是'r'(只读),'w'(读写),'c'(读写-必要时创建;默认值)或'n'(读写-截短为零长度)。其他参数很少使用,只是传递给低级 dbopen 函数。有关其用法和解释,请查阅 Berkeley DB 文档。
  • bsddb. rnopen(* filename * [,* flag * [,* mode * [,* rnflags * [,* cachesize * [,* pgsize * [,* lorder * [,* rlen * [,* delim * [,* source * [,* pad *]]]]]]]]]]]))

    • 打开一个名为* filename 的数据库记录格式文件。可以pass传递None作为 filename 来创建从不打算保留在磁盘上的文件。可选的 flag *标识用于打开文件的模式。它可以是'r'(只读),'w'(读写),'c'(读写-必要时创建;默认值)或'n'(读写-截短为零长度)。其他参数很少使用,只是传递给低级 dbopen 函数。有关其用法和解释,请查阅 Berkeley DB 文档。

Note

从 2.3 开始,某些 Unix 版本的 Python 可能具有bsddb185模块。该属性仅存在,以便与旧的 Berkeley DB 1.85 数据库库附带的系统向后兼容。绝对不能在新代码中直接使用bsddb185模块。该模块已在 Python 3 中删除。如果仍然需要,请在 PyPI 中查找。

See also

11.11.1. 哈希,BTree 和记录对象

实例化后,哈希,btree 和记录对象支持与字典相同的方法。此外,它们支持下面列出的方法。

在版本 2.3.1 中更改:添加了词典方法。

  • bsddbobject. close ( )

    • 关闭基础文件。无法再访问该对象。由于这些对象没有 open open()方法,因此要再次打开文件,必须调用新的bsddb模块打开Function。
  • bsddbobject. keys ( )

    • 返回数据库文件中包含的键列表。列表的 Sequences 未指定,因此不应依赖。特别是,对于不同的文件格式,返回的列表 Sequences 是不同的。
  • bsddbobject. has_key(* key *)

    • 如果数据库文件包含参数作为键,则返回1
  • bsddbobject. set_location(* key *)

    • 将光标设置在* key 所指示的项目上,并返回一个包含键及其值的 Tuples。对于二叉树数据库(使用btopen()打开),如果数据库中实际上不存在 key ,则光标将按排序 Sequences 指向下一项,并返回该键和值。对于其他数据库,如果在数据库中找不到 key *,则将引发KeyError
  • bsddbobject. first ( )

    • 将光标设置到数据库文件的第一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。如果数据库为空,则此方法引发bsddb.error
  • bsddbobject. next ( )

    • 将光标设置到数据库文件中的下一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。
  • bsddbobject. previous ( )

    • 将光标设置到数据库文件中的上一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。哈希表数据库(以hashopen()打开的数据库)不支持此Function。
  • bsddbobject. last ( )

    • 将光标设置到数据库文件中的最后一项并返回它。文件中的键 Sequences 未指定。哈希表数据库(以hashopen()打开的数据库)不支持此Function。如果数据库为空,则此方法引发bsddb.error
  • bsddbobject. sync ( )

    • 同步磁盘上的数据库。

Example:

>>> import bsddb
>>> db = bsddb.btopen('spam.db', 'c')
>>> for i in range(10): db['%d'%i] = '%d'% (i*i)
...
>>> db['3']
'9'
>>> db.keys()
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> db.first()
('0', '0')
>>> db.next()
('1', '1')
>>> db.last()
('9', '81')
>>> db.set_location('2')
('2', '4')
>>> db.previous()
('1', '1')
>>> for k, v in db.iteritems():
...     print k, v
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
>>> '8' in db
True
>>> db.sync()
0