Python Berkeley数据库队列

问题描述 投票:0回答:1

你如何使用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())
python berkeley-db
1个回答
0
投票

您需要在队列上调用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()

此代码有效,但记录是固定长度,这就是此代码剥离空白的原因。

© www.soinside.com 2019 - 2024. All rights reserved.