bsddb.md
1> **Источник:** https://python-all.ru/2.7/library/bsddb.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 11.11. [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb) – интерфейс к библиотеке Berkeley DB89Устарело с версии 2.6: Модуль [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb) удалён в Python 3.1011Модуль [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb) предоставляет интерфейс к библиотеке Berkeley DB. Пользователи могут создавать файлы библиотеки на основе хешей, B-деревьев или записей, используя соответствующий вызов open. Объекты bsddb в целом ведут себя как словари. Однако ключи и значения должны быть строками, поэтому для использования других объектов в качестве ключей или для хранения объектов других типов необходимо их каким-либо образом сериализовать, обычно с помощью [`marshal.dumps()`](https://python-all.ru/2.7/library/marshal.html#marshal.dumps) или [`pickle.dumps()`](https://python-all.ru/2.7/library/pickle.html#pickle.dumps).1213Модуль [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb) требует версию библиотеки Berkeley DB с 4.0 по 4.7.1415> **См. также**16>17> **[http://www.jcea.es/programacion/pybsddb.htm](https://python-all.ru/2.7/library/bsddb.html)**18>19> Веб-сайт с документацией для интерфейса `bsddb.db` Python Berkeley DB, который в точности повторяет объектно-ориентированный интерфейс, предоставляемый в самом Berkeley DB 4.x.20>21> **[http://www.oracle.com/database/berkeley-db/](https://python-all.ru/2.7/library/bsddb.html)**22>23> Библиотека Berkeley DB.2425Более современный интерфейс объектов DB, DBEnv и DBSequence доступен в модуле `bsddb.db`, который в точности соответствует C API Berkeley DB, описанному по указанным выше адресам. Дополнительные возможности, предоставляемые API `bsddb.db`, включают тонкую настройку, транзакции, журналирование и многопроцессный конкурентный доступ к базе данных.2627Ниже приводится описание устаревшего интерфейса [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb), совместимого со старым модулем Python bsddb. Начиная с Python 2.5 этот интерфейс должен быть безопасным для многопоточного доступа. API `bsddb.db` рекомендуется для пользователей, работающих с потоками, так как он обеспечивает лучший контроль.2829Модуль [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb) определяет следующие функции, создающие объекты для доступа к соответствующему типу файла Berkeley DB. Первые два аргумента каждой функции одинаковы. Для удобства переносимости в большинстве случаев следует использовать только первые два аргумента.3031#### `bsddb.hashopen(filename[, flag[, mode[, pgsize[, ffactor[, nelem[, cachesize[, lorder[, hflags]]]]]]]])`3233Открыть файл в хеш-формате с именем *filename*. Файлы, которые не предназначены для сохранения на диске, можно создать, передав `None` в качестве *filename*. Необязательный параметр *flag* определяет режим открытия файла. Он может быть `'r'` (только чтение), `'w'` (чтение-запись), `'c'` (чтение-запись – создать при необходимости; по умолчанию) или `'n'` (чтение-запись – усечь до нулевой длины). Остальные аргументы используются редко и просто передаются low-level функции `dbopen()`. Обратитесь к документации Berkeley DB за разъяснением их использования и назначения.3435#### `bsddb.btopen(filename[, flag[, mode[, btflags[, cachesize[, maxkeypage[, minkeypage[, pgsize[, lorder]]]]]]]])`3637Открыть файл в формате B-дерева с именем *filename*. Файлы, которые не предназначены для сохранения на диске, можно создать, передав `None` в качестве *filename*. Необязательный параметр *flag* определяет режим открытия файла. Он может быть `'r'` (только чтение), `'w'` (чтение-запись), `'c'` (чтение-запись – создать при необходимости; по умолчанию) или `'n'` (чтение-запись – усечь до нулевой длины). Остальные аргументы используются редко и просто передаются low-level функции dbopen. Обратитесь к документации Berkeley DB за разъяснением их использования и назначения.3839#### `bsddb.rnopen(filename[, flag[, mode[, rnflags[, cachesize[, pgsize[, lorder[, rlen[, delim[, source[, pad]]]]]]]]]])`4041Открыть файл в формате записей DB с именем *filename*. Файлы, которые не предназначены для сохранения на диске, можно создать, передав `None` в качестве *filename*. Необязательный параметр *flag* определяет режим открытия файла. Он может быть `'r'` (только чтение), `'w'` (чтение-запись), `'c'` (чтение-запись – создать при необходимости; по умолчанию) или `'n'` (чтение-запись – усечь до нулевой длины). Остальные аргументы используются редко и просто передаются low-level функции dbopen. Обратитесь к документации Berkeley DB за разъяснением их использования и назначения.4243> **Примечание**44>45> Начиная с версии 2.3 в некоторых Unix-версиях Python может присутствовать модуль `bsddb185`. Он присутствует *только* для обеспечения обратной совместимости с системами, поставляемыми со старой библиотекой базы данных Berkeley DB 1.85. Модуль `bsddb185` никогда не следует использовать напрямую в новом коде. Этот модуль удалён в Python 3. Если вы обнаружите, что он всё ещё нужен, ищите его в PyPI.4647> **См. также**48>49> **Модуль [`dbhash`](https://python-all.ru/2.7/library/dbhash.html#module-dbhash)**50>51> Интерфейс в стиле DBM к [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb)5253## 11.11.1. Объекты Hash, BTree и Record5455После создания экземпляра объекты hash, btree и record поддерживают те же методы, что и словари. Кроме того, они поддерживают методы, перечисленные ниже.5657Изменено в версии 2.3.1: Добавлены методы словаря.5859#### `bsddbobject.close()`6061Закрывает базовый файл. Объект больше не может быть доступен. Поскольку для этих объектов не существует метода open [`open()`](https://python-all.ru/2.7/library/functions.html#open), чтобы снова открыть файл, необходимо вызвать новую функцию open модуля [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb).6263#### `bsddbobject.keys()`6465Возвращает список ключей, содержащихся в файле DB. Порядок списка не определён и на него не следует полагаться. В частности, порядок возвращаемого списка различается для разных форматов файлов.6667#### `bsddbobject.has_key(key)`6869Возвращает `1`, если файл DB содержит аргумент в качестве ключа.7071#### `bsddbobject.set_location(key)`7273Устанавливает курсор на элемент, указанный *key*, и возвращает кортеж, содержащий ключ и его значение. Для баз данных на основе бинарных деревьев (открытых с помощью [`btopen()`](https://python-all.ru/2.7/library/bsddb.html#bsddb.btopen)), если *key* фактически не существует в базе данных, курсор будет указывать на следующий элемент в отсортированном порядке и вернёт этот ключ и значение. Для других баз данных будет вызвано [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError), если *key* не будет найден в базе данных.7475#### `bsddbobject.first()`7677Устанавливает курсор на первый элемент в файле DB и возвращает его. Порядок ключей в файле не определён, за исключением баз данных B-Tree. Этот метод вызывает `bsddb.error`, если база данных пуста.7879#### `bsddbobject.next()`8081Устанавливает курсор на следующий элемент в файле DB и возвращает его. Порядок ключей в файле не определён, за исключением баз данных B-Tree.8283#### `bsddbobject.previous()`8485Устанавливает курсор на предыдущий элемент в файле DB и возвращает его. Порядок ключей в файле не определён, за исключением баз данных B-Tree. Это не поддерживается для хеш-таблиц (открытых с помощью [`hashopen()`](https://python-all.ru/2.7/library/bsddb.html#bsddb.hashopen)).8687#### `bsddbobject.last()`8889Устанавливает курсор на последний элемент в файле DB и возвращает его. Порядок ключей в файле не определён. Это не поддерживается для хеш-таблиц (открытых с помощью [`hashopen()`](https://python-all.ru/2.7/library/bsddb.html#bsddb.hashopen)). Этот метод вызывает `bsddb.error`, если база данных пуста.9091#### `bsddbobject.sync()`9293Синхронизирует базу данных на диске.9495Пример:9697```python98>>> import bsddb99>>> db = bsddb.btopen('spam.db', 'c')100>>> for i in range(10): db['%d'%i] = '%d'% (i*i)101...102>>> db['3']103'9'104>>> db.keys()105['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']106>>> db.first()107('0', '0')108>>> db.next()109('1', '1')110>>> db.last()111('9', '81')112>>> db.set_location('2')113('2', '4')114>>> db.previous()115('1', '1')116>>> for k, v in db.iteritems():117... print k, v1180 01191 11202 41213 91224 161235 251246 361257 491268 641279 81128>>> '8' in db129True130>>> db.sync()1310132```133