【问题标题】:Python Berkeley Database QUEUEPython 伯克利数据库队列
【发布时间】: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())

【问题讨论】:

    标签: python berkeley-db


    【解决方案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()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      相关资源
      最近更新 更多