> **Источник:** https://python-all.ru/2.7/library/dbhash.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 11.10. [`dbhash`](https://python-all.ru/2.7/library/dbhash.html#module-dbhash) – DBM-подобный интерфейс к библиотеке баз данных BSD

Устарело с версии 2.6: Модуль [`dbhash`](https://python-all.ru/2.7/library/dbhash.html#module-dbhash) удалён в Python 3.

Модуль [`dbhash`](https://python-all.ru/2.7/library/dbhash.html#module-dbhash) предоставляет функцию для открытия баз данных с помощью библиотеки BSD `db`. Этот модуль повторяет интерфейс других модулей баз данных Python, которые обеспечивают доступ к базам данных в стиле DBM. Для использования [`dbhash`](https://python-all.ru/2.7/library/dbhash.html#module-dbhash) требуется модуль [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb).

Этот модуль предоставляет исключение и функцию:

#### `exception dbhash.error`

Исключение, возникающее при ошибках базы данных, кроме [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError). Является синонимом `bsddb.error`.

#### `dbhash.open(path[, flag[, mode]])`

Открывает базу данных `db` и возвращает объект базы данных. Аргумент *path* – это имя файла базы данных.

Аргумент *flag* может принимать следующие значения:

| Значение | Значение |
| --- | --- |
| `'r'` | Открыть существующую базу данных только для чтения (по умолчанию) |
| `'w'` | Открыть существующую базу данных для чтения и записи |
| `'c'` | Открыть базу данных для чтения и записи, создав её, если она не существует |
| `'n'` | Всегда создавать новую пустую базу данных, открытую для чтения и записи |

На платформах, где библиотека BSD `db` поддерживает блокировку, можно добавить `'l'`, чтобы указать, что блокировка должна использоваться.

Необязательный параметр *mode* используется для указания битов разрешений Unix, которые должны быть установлены, если необходимо создать новую базу данных; это значение будет маскироваться текущим значением umask процесса.

> **См. также**
>
> **Модуль [`anydbm`](https://python-all.ru/2.7/library/anydbm.html#module-anydbm)**
>
> Общий интерфейс для баз данных стиля `dbm`.
>
> **Модуль [`bsddb`](https://python-all.ru/2.7/library/bsddb.html#module-bsddb)**
>
> Низкоуровневый интерфейс к библиотеке BSD `db`.
>
> **Модуль [`whichdb`](https://python-all.ru/2.7/library/whichdb.html#module-whichdb)**
>
> Вспомогательный модуль для определения типа существующей базы данных.

## 11.10.1. Объекты базы данных

Объекты базы данных, возвращаемые [`open()`](https://python-all.ru/2.7/library/dbhash.html#dbhash.open), предоставляют общие для всех баз данных в стиле DBM и отображающих объектов методы. В дополнение к стандартным методам доступны следующие методы.

#### `dbhash.first()`

Можно перебрать все пары ключ/значение в базе данных с помощью этого метода и метода `next()`. Обход упорядочен по внутренним хеш-значениям базы данных, а не будет отсортирован по значениям ключей. Этот метод возвращает начальный ключ.

#### `dbhash.last()`

Возвращает последнюю пару ключ/значение при обходе базы данных. Это может быть использовано для начала обхода в обратном порядке; см. [`previous()`](https://python-all.ru/2.7/library/dbhash.html#dbhash.dbhash.previous).

#### `dbhash.next()`

Возвращает следующую пару ключ/значение при обходе базы данных. Следующий код выводит каждый ключ в базе данных `db`, без необходимости создавать в памяти список, содержащий их все:

```python
print db.first()
for i in xrange(1, len(db)):
    print db.next()
```

#### `dbhash.previous()`

Возвращает предыдущую пару ключ/значение при прямом обходе базы данных. В сочетании с [`last()`](https://python-all.ru/2.7/library/dbhash.html#dbhash.dbhash.last) это может быть использовано для реализации обхода в обратном порядке.

#### `dbhash.sync()`

Этот метод принудительно записывает все незаписанные данные на диск.
