On this page
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
Python Berkeley DB 接口的文档,该文档紧密地反映了 Berkeley DB 4.x 本身提供的面向对象的接口。伯克利数据库库。
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 文档。
- 打开名为* filename 的哈希格式文件。可以pass传递
bsddb.
btopen
(* filename * [,* flag * [,* mode * [,* btflags * [,* cachesize * [,* maxkeypage * [,* minkeypage * [,* pgsize * [,* lorder *]]]]] ]]]]))- 打开名为* filename 的 btree 格式文件。可以pass传递
None
作为 filename 来创建从不打算保留在磁盘上的文件。可选的 flag *标识用于打开文件的模式。它可以是'r'
(只读),'w'
(读写),'c'
(读写-必要时创建;默认值)或'n'
(读写-截短为零长度)。其他参数很少使用,只是传递给低级 dbopen 函数。有关其用法和解释,请查阅 Berkeley DB 文档。
- 打开名为* filename 的 btree 格式文件。可以pass传递
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 文档。
- 打开一个名为* filename 的数据库记录格式文件。可以pass传递
Note
从 2.3 开始,某些 Unix 版本的 Python 可能具有bsddb185
模块。该属性仅存在,以便与旧的 Berkeley DB 1.85 数据库库附带的系统向后兼容。绝对不能在新代码中直接使用bsddb185
模块。该模块已在 Python 3 中删除。如果仍然需要,请在 PyPI 中查找。
11.11.1. 哈希,BTree 和记录对象
实例化后,哈希,btree 和记录对象支持与字典相同的方法。此外,它们支持下面列出的方法。
在版本 2.3.1 中更改:添加了词典方法。
bsddbobject.
close
( )bsddbobject.
keys
( )- 返回数据库文件中包含的键列表。列表的 Sequences 未指定,因此不应依赖。特别是,对于不同的文件格式,返回的列表 Sequences 是不同的。
bsddbobject.
has_key
(* key *)- 如果数据库文件包含参数作为键,则返回
1
。
- 如果数据库文件包含参数作为键,则返回
bsddbobject.
set_location
(* key *)bsddbobject.
first
( )- 将光标设置到数据库文件的第一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。如果数据库为空,则此方法引发
bsddb.error
。
- 将光标设置到数据库文件的第一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。如果数据库为空,则此方法引发
bsddbobject.
next
( )- 将光标设置到数据库文件中的下一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。
bsddbobject.
previous
( )- 将光标设置到数据库文件中的上一项并返回它。除 B-Tree 数据库外,文件中的键 Sequences 未指定。哈希表数据库(以hashopen()打开的数据库)不支持此Function。
bsddbobject.
last
( )- 将光标设置到数据库文件中的最后一项并返回它。文件中的键 Sequences 未指定。哈希表数据库(以hashopen()打开的数据库)不支持此Function。如果数据库为空,则此方法引发
bsddb.error
。
- 将光标设置到数据库文件中的最后一项并返回它。文件中的键 Sequences 未指定。哈希表数据库(以hashopen()打开的数据库)不支持此Function。如果数据库为空,则此方法引发
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