11.11. bsddb — Berkeley DB 库的接口 — Python 文档
11.11. 数据库 — Berkeley DB 库的接口
自 2.6 版起已弃用:bsddb 模块已在 Python 3 中删除。
bsddb 模块提供了一个到 Berkeley DB 库的接口。 用户可以使用适当的 open 调用创建基于哈希、btree 或记录的库文件。 Bsddb 对象的行为通常类似于字典。 但是,键和值必须是字符串,因此要使用其他对象作为键或存储其他类型的对象,用户必须以某种方式序列化它们,通常使用 marshal.dumps() 或 pickle.dumps ()。
bsddb 模块需要从 4.0 到 4.7 的 Berkeley DB 库版本。
也可以看看
- http://www.jcea.es/programacion/pybsddb.htm
- 该网站包含
bsddb.db
Python Berkeley DB 接口的文档,该接口密切反映了 Berkeley DB 4.x 本身提供的面向对象接口。 - http://www.oracle.com/database/berkeley-db/
- 伯克利数据库库。
bsddb.db
模块中提供了一个更现代的 DB、DBEnv 和 DBSequence 对象接口,它与上述 URL 中记录的 Berkeley DB C API 非常匹配。 bsddb.db
API 提供的附加功能包括微调、事务、日志记录和多进程并发数据库访问。
以下是与旧 Python bsddb 模块兼容的旧 bsddb 接口的说明。 从 Python 2.5 开始,这个接口对于多线程访问应该是安全的。 建议线程用户使用 bsddb.db
API,因为它提供更好的控制。
bsddb 模块定义了以下函数,这些函数创建访问适当类型的 Berkeley DB 文件的对象。 每个函数的前两个参数是相同的。 为了便于移植,大多数情况下只应使用前两个参数。
- bsddb.hashopen(filename[, flag[, mode[, pgsize[, ffactor[, nelem[, cachesize[, lorder[, hflags]]]]]]]])
- 打开名为 filename 的哈希格式文件。 可以通过将
None
作为 文件名 传递来创建从不打算保留在磁盘上的文件。 可选的 标志 标识用于打开文件的模式。 它可能是'r'
(只读)、'w'
(读写)、'c'
(读写 - 必要时创建;默认)或 [X122X ](读写 - 截断为零长度)。 其他参数很少使用,只是传递给低级dbopen()
函数。 有关它们的使用和解释,请参阅 Berkeley DB 文档。
- bsddb.btopen(filename[, flag[, mode[, btflags[, cachesize[, maxkeypage[, minkeypage[, pgsize[, lorder]]]]]]]])
- 打开名为 filename 的 btree 格式文件。 可以通过将
None
作为 文件名 传递来创建从不打算保留在磁盘上的文件。 可选的 标志 标识用于打开文件的模式。 它可能是'r'
(只读)、'w'
(读写)、'c'
(读写 - 必要时创建;默认)或 [X122X ](读写 - 截断为零长度)。 其他参数很少使用,只是传递给低级 dbopen 函数。 有关它们的使用和解释,请参阅 Berkeley DB 文档。
- bsddb.rnopen(filename[, flag[, mode[, rnflags[, cachesize[, pgsize[, lorder[, rlen[, delim[, source[, pad]]]]]]]]]])
- 打开名为 filename 的 DB 记录格式文件。 可以通过将
None
作为 文件名 传递来创建从不打算保留在磁盘上的文件。 可选的 标志 标识用于打开文件的模式。 它可能是'r'
(只读)、'w'
(读写)、'c'
(读写 - 必要时创建;默认)或 [X122X ](读写 - 截断为零长度)。 其他参数很少使用,只是传递给低级 dbopen 函数。 有关它们的使用和解释,请参阅 Berkeley DB 文档。
笔记
从 2.3 开始,一些 Unix 版本的 Python 可能有一个 bsddb185
模块。 这是目前 only 以允许与旧的 Berkeley DB 1.85 数据库库附带的系统向后兼容。 bsddb185
模块不应直接在新代码中使用。 该模块已在 Python 3 中删除。 如果您发现您仍然需要它,请查看 PyPI。
11.11.1. 哈希、BTree 和记录对象
一旦实例化,hash、btree 和 record 对象支持与字典相同的方法。 此外,它们支持下面列出的方法。
2.3.1 版本变化: 添加字典方法。
- bsddbobject.keys()
- 返回包含在 DB 文件中的键列表。 列表的顺序未指定,不应依赖。 特别是对于不同的文件格式,返回列表的顺序是不同的。
- bsddbobject.has_key(key)
- 如果 DB 文件包含参数作为键,则返回
1
。
- bsddbobject.set_location(key)
- 将光标设置为 key 指示的项目,并返回一个包含键及其值的元组。 对于二叉树数据库(使用 btopen() 打开),如果 key 在数据库中实际上不存在,光标将按排序顺序指向下一项并返回该键并价值。 对于其他数据库,如果在数据库中找不到 key,则会引发
KeyError
。
- bsddbobject.first()
- 将光标设置到 DB 文件中的第一项并返回它。 文件中键的顺序是未指定的,B 树数据库除外。 如果数据库为空,此方法会引发
bsddb.error
。
- bsddbobject.next()
- 将光标设置到 DB 文件中的下一项并返回它。 文件中键的顺序是未指定的,B 树数据库除外。
- bsddbobject.previous()
- 将光标设置到 DB 文件中的上一项并返回它。 文件中键的顺序未指定,B 树数据库除外。 哈希表数据库(使用 hashopen() 打开的数据库)不支持此操作。
- bsddbobject.last()
- 将光标设置到 DB 文件中的最后一项并返回它。 文件中键的顺序未指定。 哈希表数据库(使用 hashopen() 打开的数据库)不支持此操作。 如果数据库为空,此方法会引发
bsddb.error
。
- bsddbobject.sync()
- 同步磁盘上的数据库。
例子:
>>> 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