Хранение данных в базе данных Berkeley DB с помощью Python и bsddb3

Я пытаюсь записать данные в базу данных Berkeley DB, используя Python 3.5 и bsddb3. У меня нет опыта работы с Berkeley DB, но мне нравится использовать метку времени в качестве ключа и некоторые данные JSON в качестве соответствующего значения. Следующий пример приводит к ошибке:

#!/usr/bin/env python3

import bsddb3
import time

fn = 'berkeley.db'
db = bsddb3.hashopen(fn, 'c')
t = time.time()
d = "{ data: 'foo' }"
db[t] = d
db.close()

Ошибка:

$ python3 example.py
[...]
self.db[key] = value
TypeError: Bytes or Integer object expected for key, float found

Использование целого числа вместо time.time(), например, db[0] = data, тоже не работает: TypeError: Integer keys only allowed for Recno and Queue DB's,

К сожалению, нет полной документации по использованию Berkeley DB с Python. Любые предложения относительно того, что я делаю не так?

1 ответ

Я получил решение, читая документацию кабинета Киото. Ключ должен быть закодирован как байт:

db[b'key'] = d
print((db.get(b'key')))

Выполнение примера с вышеуказанными изменениями приведет к выводу набора сохраненных данных:

$ python3 main.py
b"{ data: 'random' }"
Другие вопросы по тегам