Модуль shelve использует базовый пакет базы данных (например, dbm, gdbm или bsddb).
"Полка" - это постоянный словарный объект. Разница с базами данных "dbm" заключается в том, что значения (а не ключи!) В полке могут быть по существу произвольными объектами Python - всем, что может обрабатывать модуль pickle. Это включает в себя большинство экземпляров классов, рекурсивных типов данных и объектов, содержащих множество общих подобъектов. Ключи обычные струны. Раздел examples дает вам подтверждение.
Это должно работать. Вот что я делаю в своем коде -
import shelve
#Create shelve
s = shelve.open('test_shelf.db')
try:
s['key1'] = { 'int': 10, 'float':9.5, 'string':'Sample data' }
finally:
s.close()
#Access shelve
s = shelve.open('test_shelf.db')
try:
existing = s['key1']
finally:
s.close()
print existing
ОБНОВЛЕНИЕ: Вы можете попробовать pickle
модуль. Это не база данных ключ-значение, но вы всегда можете построить свою структуру данных как пары ключ-значение и затем отправить ее на pickle
-
Если у вас есть объект x и файловый объект f, который был открыт для записи, самый простой способ выделить объект - это всего одна строка кода
pickle.dump(x, f)
Для повторного выделения объекта, если f - это файловый объект, который был открыт для чтения:
x = pickle.load(f)
Я слышал, cPickle
намного быстрее, чем pickle
. Вы можете попробовать это, если у вас есть много данных для хранения.