使用 Berkeley DB(bsddb 模块)、Python

Posted

技术标签:

【中文标题】使用 Berkeley DB(bsddb 模块)、Python【英文标题】:Working with Berkeley DB( bsddb module ), Python 【发布时间】:2014-03-02 11:14:27 【问题描述】:

我正在使用 python 2.7.3 和 Berkeley DB 来存储数据。我没有找到有关该模块的太多信息,仅在 python 码头中。我看到那里描述了一些功能,但我没有看到有关如何从数据库中删除记录的说明。请帮忙,如果您知道如何删除记录并且可以使用 bsddb 吗?

【问题讨论】:

【参考方案1】:

根据the documentation:

一旦实例化,散列、btree 和记录对象支持与字典相同的方法

所以,您可以使用del db_object['key'] 像字典一样删除特定记录。

>>> import bsddb
>>> db = bsddb.hashopen('a.db', 'c')
>>> db['a'] = '1'
>>> db.keys()
['a']
>>> del db['a'] # <-----
>>> db.keys()
[]

db_object.pop('key') 也可以。

>>> db['b'] = '2'
>>> db.keys()
['b']
>>> db.pop('b')
'2'

del.pop() 与不存在的密钥将引发 KeyError 或类似的异常。如果您想忽略不存在的密钥,请使用.pop('key', None)

>>> db.pop('b') # This raises an exception
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/_abcoll.py", line 497, in pop
    value = self[key]
  File "/usr/lib/python2.7/bsddb/__init__.py", line 270, in __getitem__
    return _DeadlockWrap(lambda: self.db[key])  # self.db[key]
  File "/usr/lib/python2.7/bsddb/dbutils.py", line 68, in DeadlockWrap
    return function(*_args, **_kwargs)
  File "/usr/lib/python2.7/bsddb/__init__.py", line 270, in <lambda>
    return _DeadlockWrap(lambda: self.db[key])  # self.db[key]
KeyError: 'b'
>>> db.pop('b', None) # This does not.
>>>

【讨论】:

以上是关于使用 Berkeley DB(bsddb 模块)、Python的主要内容,如果未能解决你的问题,请参考以下文章

在 Berkeley DB 中通过 python 使用整数键(使用 bsddb3)

无法在 macOS Catalina 10.15.4 上安装 bsddb3 Python 包

从值中检索一系列数据 Berkeley DB

在 python 的 berkeley db 中表达多列?

如何在不安装的情况下在应用程序中使用 Berkeley DB

bsddb3 DB.get/put 挂起事务