Python 伯克利数据库队列
Posted
技术标签:
【中文标题】Python 伯克利数据库队列【英文标题】:Python Berkeley Database QUEUE 【发布时间】:2019-02-14 05:23:53 【问题描述】:如何使用 python 中的 Berkely 数据库队列?我在任何地方都找不到示例。
这是我迄今为止最好的尝试,但它引发了无效参数错误。
import bsddb3
import os
db = bsddb3.db.DB()
db.open(os.path.abspath("test.db"),bsddb3.db.DB_QUEUE,bsddb3.db.DB_TRUNCATE | bsddb3.db.DB_CREATE)
# Next line raises bsddb3.db.DBInvalidArgError: (22, "Invalid argument -- BDB0104 9 larger than database's maximum record length 0")
db.put(db.stat()['cur_recno'],'"rec":1')
print(db.consume())
【问题讨论】:
【参考方案1】:您需要在 QUEUE 上调用 set_re_len 来指定数据长度。我在记录长度下的文档中找到了解决方案。
https://docs.oracle.com/cd/E17276_01/html/programmer_reference/rq_conf.html#am_conf_recno
import bsddb3
import os
db = bsddb3.db.DB()
db.set_re_len(1024)
db.open(os.path.abspath("test.db"),bsddb3.db.DB_QUEUE,bsddb3.db.DB_TRUNCATE | bsddb3.db.DB_CREATE)
db.put(1,'"rec":1'.encode('utf-8'),None,bsddb3.db.DB_APPEND)
db.put(1,'"rec":2'.encode('utf-8'),None,bsddb3.db.DB_APPEND)
print(db.consume()[1].decode('utf-8').strip())
print(db.consume()[1].decode('utf-8').strip())
db.close()
此代码有效,但记录的长度是固定的,这就是此代码去除空格的原因。
【讨论】:
以上是关于Python 伯克利数据库队列的主要内容,如果未能解决你的问题,请参考以下文章