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

---

# 11.6. [`anydbm`](https://python-all.ru/2.7/library/anydbm.html#module-anydbm) – универсальный доступ к базам данных DBM

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

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

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

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

Если файл базы данных уже существует, модуль [`whichdb`](https://python-all.ru/2.7/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.7/library/anydbm.html#anydbm.error) является первым элементом – последнее используется, когда возбуждается [`anydbm.error`](https://python-all.ru/2.7/library/anydbm.html#anydbm.error).

Объект, возвращаемый [`open()`](https://python-all.ru/2.7/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()
```

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

#### `anydbm.close()`

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

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