Хранение данных в базе данных 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' }"