Python 伯克利数据库队列

Python Berkeley Database QUEUE

如何使用 python 中的 Berkeley 数据库队列?我在任何地方都找不到示例。

这是我迄今为止最好的尝试,但它引发了无效参数错误。

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())

您需要在 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()

此代码有效,但记录的长度是固定的,这就是此代码去除空格的原因。