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

---

# 11.6. `anydbm` – Generic access to DBM-style databases

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

`anydbm` – это универсальный интерфейс к разновидностям базы данных DBM – [`dbhash`](https://python-all.ru/2.6/library/dbhash.html#module-dbhash) (требует [`bsddb`](https://python-all.ru/2.6/library/bsddb.html#module-bsddb)), [`gdbm`](https://python-all.ru/2.6/library/gdbm.html#module-gdbm) или [`dbm`](https://python-all.ru/2.6/library/dbm.html#module-dbm). Если ни один из этих модулей не установлен, будет использоваться медленная, но простая реализация из модуля [`dumbdbm`](https://python-all.ru/2.6/library/dumbdbm.html#module-dumbdbm).

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

Открывает файл базы данных *filename* и возвращает соответствующий объект.

Если файл базы данных уже существует, модуль [`whichdb`](https://python-all.ru/2.6/library/whichdb.html#module-whichdb) используется для определения его типа, и подключается соответствующий модуль; если файла нет, используется первый из перечисленных выше модулей, который удалось импортировать.

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

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

Если не указано, значением по умолчанию является `'r'`.

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

#### `exception anydbm.error`

Кортеж, содержащий исключения, которые могут быть вызваны каждым из поддерживаемых модулей, с уникальным исключением, также названным

[`anydbm.error`](https://python-all.ru/2.6/library/anydbm.html#anydbm.error)

в качестве первого элемента – последнее используется, когда возникает

[`anydbm.error`](https://python-all.ru/2.6/library/anydbm.html#anydbm.error)

.

Объект, возвращаемый функцией [`open()`](https://python-all.ru/2.6/library/anydbm.html#anydbm.open), поддерживает большинство тех же возможностей, что и словари; можно сохранять, извлекать и удалять ключи и соответствующие им значения, а также доступны методы `has_key()` и `keys()`. Ключи и значения всегда должны быть строками.

Следующий пример записывает несколько имен хостов и соответствующий заголовок, а затем выводит содержимое базы данных:

```python
import anydbm

# Открыть базу данных, создав её при необходимости.
db = anydbm.open('cache', 'c')

# Записать несколько значений.
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'

# Перебор содержимого.  Другие методы словаря
# такие как .keys(), .values() также работают.
for k, v in db.iteritems():
    print k, '\t', v

# Сохранение нестрокового ключа или значения вызовет исключение (скорее всего,
# TypeError).
db['www.yahoo.com'] = 4

# Закрыть после завершения.
db.close()
```

> **См. также**
>
> **Модуль [`dbhash`](https://python-all.ru/2.6/library/dbhash.html#module-dbhash)**
>
> Интерфейс к базе данных BSD
>
> `db`
>
> .
>
> **Модуль [`dbm`](https://python-all.ru/2.6/library/dbm.html#module-dbm)**
>
> Стандартный интерфейс базы данных Unix.
>
> **Модуль [`dumbdbm`](https://python-all.ru/2.6/library/dumbdbm.html#module-dumbdbm)**
>
> Переносимая реализация интерфейса
>
> `dbm`
>
> .
>
> **Модуль [`gdbm`](https://python-all.ru/2.6/library/gdbm.html#module-gdbm)**
>
> Интерфейс к базе данных GNU, основанный на интерфейсе
>
> `dbm`
>
> .
>
> **Модуль [`shelve`](https://python-all.ru/2.6/library/shelve.html#module-shelve)**
>
> Универсальное сохранение объектов (persistence) на основе интерфейса Python
>
> `dbm`
>
> .
>
> **Модуль [`whichdb`](https://python-all.ru/2.6/library/whichdb.html#module-whichdb)**
>
> Вспомогательный модуль для определения типа существующей базы данных.
