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

---

# 11.8. [`dbm`](https://python-all.ru/2.7/library/dbm.html#module-dbm) – Простой интерфейс «базы данных»

> **Примечание**
>
> Модуль [`dbm`](https://python-all.ru/2.7/library/dbm.html#module-dbm) был переименован в `dbm.ndbm` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходных кодов в Python 3.

Модуль [`dbm`](https://python-all.ru/2.7/library/dbm.html#module-dbm) предоставляет интерфейс к библиотеке Unix «(n)dbm». Объекты dbm ведут себя как отображения (словари), за исключением того, что ключи и значения всегда являются строками. При выводе объекта dbm ключи и значения не печатаются, а методы `items()` и `values()` не поддерживаются.

Этот модуль можно использовать с «классическим» интерфейсом ndbm, интерфейсом совместимости BSD DB или интерфейсом совместимости GNU GDBM. В Unix сценарий **configure** попытается найти соответствующий заголовочный файл, чтобы упростить сборку этого модуля.

Модуль определяет следующее:

#### `exception dbm.error`

Возникает при ошибках, специфичных для dbm, например, ошибках ввода-вывода. [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError) возникает при общих ошибках отображения, например, при указании неверного ключа.

#### `dbm.library`

Имя используемой библиотеки реализации `ndbm`.

#### `dbm.open(filename[, flag[, mode]])`

Открывает базу данных dbm и возвращает объект dbm. Аргумент *filename* – это имя файла базы данных (без расширений `.dir` или `.pag`; обратите внимание, что реализация интерфейса BSD DB добавляет расширение `.db` и создаёт только один файл).

Необязательный аргумент *flag* должен быть одним из следующих значений:

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

Необязательный аргумент *mode* – это режим файла Unix, используемый только при создании базы данных. По умолчанию это восьмеричное `0666` (и будет изменено текущей umask).

В дополнение к методам, похожим на словарные, объекты `dbm` предоставляют следующий метод:

#### `dbm.close()`

Закрыть базу данных `dbm`.

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