База данных Python Berkeley QUEUE - PullRequest
0 голосов
/ 14 февраля 2019

Как вы используете базу данных Berkely из python?Я нигде не могу найти пример.

На данный момент это моя лучшая попытка, но возникает неверная ошибка аргумента.

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 Ответ

0 голосов
/ 15 февраля 2019

Вам необходимо вызвать set_re_len для QUEUE, чтобы указать длину данных.Я нашел решение в документации по длине записи.

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

Этот код работает, но записи имеют фиксированную длину, поэтому этот код удаляет пробелы.

...