Содержание страницы
11.11. bsddb – интерфейс к библиотеке Berkeley DB¶bsddb – Interface to Berkeley DB library
Устарело с версии 2.6: Модуль bsddb удалён в Python 3.
Модуль bsddb предоставляет интерфейс к библиотеке Berkeley DB. Пользователи могут создавать файлы библиотеки на основе хешей, B-деревьев или записей, используя соответствующий вызов open. Объекты bsddb в целом ведут себя как словари. Однако ключи и значения должны быть строками, поэтому для использования других объектов в качестве ключей или для хранения объектов других типов необходимо их каким-либо образом сериализовать, обычно с помощью marshal.dumps() или pickle.dumps().
Модуль bsddb требует версию библиотеки Berkeley DB с 4.0 по
4.7.
См. также
- http://www.jcea.es/programacion/pybsddb.htm
Веб-сайт с документацией для интерфейса
bsddb.dbPython Berkeley DB, который в точности повторяет объектно-ориентированный интерфейс, предоставляемый в самом Berkeley DB 4.x.- http://www.oracle.com/database/berkeley-db/
Библиотека Berkeley DB.
Более современный интерфейс объектов DB, DBEnv и DBSequence доступен в модуле bsddb.db, который в точности соответствует C API Berkeley DB, описанному по указанным выше адресам. Дополнительные возможности, предоставляемые API bsddb.db, включают тонкую настройку, транзакции, журналирование и многопроцессный конкурентный доступ к базе данных.
Ниже приводится описание устаревшего интерфейса bsddb, совместимого со старым модулем Python bsddb. Начиная с Python 2.5 этот интерфейс должен быть безопасным для многопоточного доступа. API bsddb.db рекомендуется для пользователей, работающих с потоками, так как он обеспечивает лучший контроль.
Модуль bsddb определяет следующие функции, создающие объекты для доступа к соответствующему типу файла Berkeley DB. Первые два аргумента каждой функции одинаковы. Для удобства переносимости в большинстве случаев следует использовать только первые два аргумента.
-
bsddb.hashopen(filename[, flag[, mode[, pgsize[, ffactor[, nelem[, cachesize[, lorder[, hflags]]]]]]]])¶ Открыть файл в хеш-формате с именем filename. Файлы, которые не предназначены для сохранения на диске, можно создать, передав
Noneв качестве filename. Необязательный параметр flag определяет режим открытия файла. Он может быть'r'(только чтение),'w'(чтение-запись),'c'(чтение-запись – создать при необходимости; по умолчанию) или'n'(чтение-запись – усечь до нулевой длины). Остальные аргументы используются редко и просто передаются low-level функцииdbopen(). Обратитесь к документации Berkeley DB за разъяснением их использования и назначения.
-
bsddb.btopen(filename[, flag[, mode[, btflags[, cachesize[, maxkeypage[, minkeypage[, pgsize[, lorder]]]]]]]])¶ Открыть файл в формате B-дерева с именем filename. Файлы, которые не предназначены для сохранения на диске, можно создать, передав
Noneв качестве filename. Необязательный параметр flag определяет режим открытия файла. Он может быть'r'(только чтение),'w'(чтение-запись),'c'(чтение-запись – создать при необходимости; по умолчанию) или'n'(чтение-запись – усечь до нулевой длины). Остальные аргументы используются редко и просто передаются low-level функции dbopen. Обратитесь к документации Berkeley DB за разъяснением их использования и назначения.
-
bsddb.rnopen(filename[, flag[, mode[, rnflags[, cachesize[, pgsize[, lorder[, rlen[, delim[, source[, pad]]]]]]]]]])¶ Открыть файл в формате записей DB с именем filename. Файлы, которые не предназначены для сохранения на диске, можно создать, передав
Noneв качестве filename. Необязательный параметр flag определяет режим открытия файла. Он может быть'r'(только чтение),'w'(чтение-запись),'c'(чтение-запись – создать при необходимости; по умолчанию) или'n'(чтение-запись – усечь до нулевой длины). Остальные аргументы используются редко и просто передаются low-level функции dbopen. Обратитесь к документации Berkeley DB за разъяснением их использования и назначения.
Примечание
Начиная с версии 2.3 в некоторых Unix-версиях Python может присутствовать модуль bsddb185. Он присутствует только для обеспечения обратной совместимости с системами, поставляемыми со старой библиотекой базы данных Berkeley DB 1.85. Модуль bsddb185 никогда не следует использовать напрямую в новом коде. Этот модуль удалён в Python 3. Если вы обнаружите, что он всё ещё нужен, ищите его в PyPI.
11.11.1. Объекты Hash, BTree и Record¶Hash, BTree and Record Objects
После создания экземпляра объекты hash, btree и record поддерживают те же методы, что и словари. Кроме того, они поддерживают методы, перечисленные ниже.
Изменено в версии 2.3.1: Добавлены методы словаря.
-
bsddbobject.close()¶ Закрывает базовый файл. Объект больше не может быть доступен. Поскольку для этих объектов не существует метода open
open(), чтобы снова открыть файл, необходимо вызвать новую функцию open модуляbsddb.
-
bsddbobject.keys()¶ Возвращает список ключей, содержащихся в файле DB. Порядок списка не определён и на него не следует полагаться. В частности, порядок возвращаемого списка различается для разных форматов файлов.
-
bsddbobject.has_key(key)¶ Возвращает
1, если файл DB содержит аргумент в качестве ключа.
-
bsddbobject.set_location(key)¶ Устанавливает курсор на элемент, указанный key, и возвращает кортеж, содержащий ключ и его значение. Для баз данных на основе бинарных деревьев (открытых с помощью
btopen()), если key фактически не существует в базе данных, курсор будет указывать на следующий элемент в отсортированном порядке и вернёт этот ключ и значение. Для других баз данных будет вызваноKeyError, если key не будет найден в базе данных.
-
bsddbobject.first()¶ Устанавливает курсор на первый элемент в файле DB и возвращает его. Порядок ключей в файле не определён, за исключением баз данных B-Tree. Этот метод вызывает
bsddb.error, если база данных пуста.
-
bsddbobject.next()¶ Устанавливает курсор на следующий элемент в файле DB и возвращает его. Порядок ключей в файле не определён, за исключением баз данных B-Tree.
-
bsddbobject.previous()¶ Устанавливает курсор на предыдущий элемент в файле DB и возвращает его. Порядок ключей в файле не определён, за исключением баз данных B-Tree. Это не поддерживается для хеш-таблиц (открытых с помощью
hashopen()).
-
bsddbobject.last()¶ Устанавливает курсор на последний элемент в файле DB и возвращает его. Порядок ключей в файле не определён. Это не поддерживается для хеш-таблиц (открытых с помощью
hashopen()). Этот метод вызываетbsddb.error, если база данных пуста.
-
bsddbobject.sync()¶ Синхронизирует базу данных на диске.
Пример:
>>> import bsddb
>>> db = bsddb.btopen('spam.db', 'c')
>>> for i in range(10): db['%d'%i] = '%d'% (i*i)
...
>>> db['3']
'9'
>>> db.keys()
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> db.first()
('0', '0')
>>> db.next()
('1', '1')
>>> db.last()
('9', '81')
>>> db.set_location('2')
('2', '4')
>>> db.previous()
('1', '1')
>>> for k, v in db.iteritems():
... print k, v
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
>>> '8' in db
True
>>> db.sync()
0