bsddb
bsddb — Interface to Berkeley DB library
自2.6版以来已弃用:该bsddb
模块已在Python 3中删除。
该bsddb
模块为Berkeley DB库提供了一个接口。用户可以使用适当的公开呼叫创建哈希,btree或基于记录的库文件。Bsddb对象的行为通常与字典类似。但是,键和值必须是字符串,因此要将其他对象用作键或存储其他类型的对象,用户必须以某种方式将它们序列化,通常使用marshal.dumps()
或pickle.dumps()
。
该bsddb
模块需要从4.0到4.7的Berkeley DB库版本。
模块中提供了更现代的DB,DBEnv和DBSequence对象接口,bsddb.db
它与上述URL中记录的Berkeley DB C API密切匹配。bsddb.db
API 提供的其他功能包括微调,事务处理,日志记录和多进程并发数据库访问。
以下是bsddb
与旧的Python 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'
(读写 - 如果需要则创建;默认)或'n'
(读写 - 截断为零长度)。其他参数很少使用,只传递给低级dbopen()
函数。请参阅Berkeley DB文档以获取它们的使用和解释。
bsddb.btopen(filename[, flag[, mode[, btflags[, cachesize[, maxkeypage[, minkeypage[, pgsize[, lorder]]]]]]]])
打开名为filename
的btree格式文件
。从不打算保存在磁盘上None
的文件
可以通过传递作为文件名
来创建。可选标志
标识用于打开文件
的模式。它可以是'r'
(只读),'w'
(读写),'c'
(读写 - 如果需要则创建;默认)或'n'
(读写 - 截断为零长度)。其他参数很少使用,只传递给低级dbopen函数。请参阅Berkeley DB文档以获取它们的使用和解释。
bsddb.rnopen(filename[, flag[, mode[, rnflags[, cachesize[, pgsize[, lorder[, rlen[, delim[, source[, pad]]]]]]]]]])
打开一个名为filename
的DB记录格式文件
。从不打算保存在磁盘上None
的文件
可以通过传递作为文件名
来创建。可选标志
标识用于打开文件
的模式。它可以是'r'
(只读),'w'
(读写),'c'
(读写 - 如果需要则创建;默认)或'n'
(读写 - 截断为零长度)。其他参数很少使用,只传递给低级dbopen函数。请参阅Berkeley DB文档以获取它们的使用和解释。
注释
从2.3开始,Python的某些Unix版本可能有一个bsddb185
模块。这只是
为了允许与旧Berkeley DB 1.85数据库附带的系统向后兼容。bsddb185
不应该直接在新代码中使用该模块。该模块已在Python 3中删除。如果您发现您仍然需要它,请查看PyPI。
1.哈希,BTree和记录对象
一旦实例化,哈希,btree和记录对象支持与字典相同的方法。另外,他们支持下面列出的方法。
在版本2.3.1中进行了更改:添加了字典方法。
bsddbobject.close()
关闭底层文件。该对象不能再被访问。由于open()
这些对象没有开放的方法,所以要再次打开文件,bsddb
必须调用一个新的模块打开函数。
bsddbobject.keys()
返回DB文件中包含的密钥列表。列表的顺序是未指定的,不应该依赖。特别是,对于不同的文件格式,返回列表的顺序是不同的。
bsddbobject.has_key(key)
返回1
如果DB文件中包含的参数作为重点。
bsddbobject.set_location(key)
将游标设置为key所
指示的项目并返回包含该键及其值的元组。对于使用二进制树数据库的数据库btopen()
,如果key
实际上不存在于数据库中,则游标将按照排序顺序指向下一个项目并返回该键和值。对于其他数据库,KeyError
如果在数据库中找不到密钥
,则会引发其他数据库。
bsddbobject.first()
将光标设置为DB文件中的第一项并返回。除B-Tree数据库外,文件中键的顺序是未指定的。bsddb.error
如果数据库为空,则引发此方法。
bsddbobject.next()
将光标设置为DB文件中的下一个项目并将其返回。除B-Tree数据库外,文件中键的顺序是未指定的。
bsddbobject.previous()
将光标设置到数据库文件中的前一项并返回。除B-Tree数据库外,文件中键的顺序是未指定的。这在散列表数据库(打开的数据库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