11.11. bsddb — Berkeley DB 库的接口 — Python 文档

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

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。


也可以看看

模块 dbhash
bsddb 的 DBM 式接口


11.11.1. 哈希、BTree 和记录对象

一旦实例化,hash、btree 和 record 对象支持与字典相同的方法。 此外,它们支持下面列出的方法。

2.3.1 版本变化: 添加字典方法。


bsddbobject.close()
关闭底层文件。 无法再访问该对象。 由于这些对象没有 open open() 方法,要再次打开文件,必须调用新的 bsddb 模块 open 函数。
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