Документация Python неофициальный перевод
Содержание страницы

dbm – Интерфейсы к Unix-«базам данных»dbm – Interfaces to Unix “databases”

dbm – универсальный интерфейс к разновидностям базы данных DBM –
dbm.gnu или dbm.ndbm. Если ни один из этих модулей не установлен, будет использована медленная, но простая реализация из модуля dbm.dumb. Существует сторонний интерфейс к Oracle Berkeley DB.
exception dbm.error
Кортеж, содержащий исключения, которые могут быть возбуждены каждым из поддерживаемых модулей, причём уникальное исключение с тем же именем dbm.error является первым элементом – последнее используется, когда возбуждается dbm.error.
dbm.whichdb(filename)

Эта функция пытается угадать, какой из нескольких простых модулей баз данных – dbm.bsd, dbm.gnu, dbm.ndbm или dbm.dumb – следует использовать для открытия заданного файла.

Возвращает одно из следующих значений: None, если файл не может быть открыт, так как он нечитаем или не существует; пустую строку (''), если формат файла не удаётся определить; или строку, содержащую имя требуемого модуля, например 'dbm.ndbm' или 'dbm.gnu'.

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

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

Если файл базы данных уже существует, функция whichdb() используется для определения его типа, и используется соответствующий модуль; если он не существует, используется первый модуль из перечисленных выше, который можно импортировать.

Необязательный аргумент flag может быть 'r' для открытия существующей базы данных только на чтение, 'w' для открытия существующей базы данных на чтение и запись, 'c' для создания базы данных, если она не существует, или 'n', который всегда создаёт новую пустую базу данных. Если не указан, значение по умолчанию – 'r'.

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

Объект, возвращаемый open(), поддерживает почти те же возможности, что и словари: можно сохранять, получать и удалять ключи и соответствующие им значения; также доступны оператор in и метод keys(). Ключи и значения всегда хранятся в виде байт. Это означает, что при использовании строк они неявно преобразуются в кодировку по умолчанию перед сохранением.

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

import dbm

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

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

# Обратите внимание: теперь ключи считаются байтами.
assert db[b'www.python.org'] == b'Python Website'
# Обратите внимание, что теперь значение хранится в байтах.
assert db['www.cnn.com'] == b'Cable News Network'

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

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

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

См. также

Модуль shelve
Модуль персистентности, который хранит нестроковые данные.

Отдельные подмодули описаны в следующих разделах.

dbm.gnu – переосмысление dbm от GNUdbm.gnu – GNU’s reinterpretation of dbm

Платформы: Unix

Этот модуль во многом похож на модуль dbm, но использует библиотеку GNU gdbm, чтобы предоставить некоторые дополнительные возможности. Обратите внимание, что форматы файлов, создаваемые dbm.gnu и dbm.ndbm, несовместимы.

Модуль dbm.gnu предоставляет интерфейс к библиотеке GNU DBM. Объекты dbm.gnu.gdbm ведут себя как отображения (словари), за исключением того, что ключи и значения всегда преобразуются в байты перед сохранением. При выводе объекта gdbm не выводятся ключи и значения, а методы items() и values() не поддерживаются.

exception dbm.gnu.error
Возбуждается при ошибках, специфичных для dbm.gnu, например, при ошибках ввода-вывода. KeyError возбуждается при общих ошибках отображения, таких как указание неверного ключа.
dbm.gnu.open(filename[, flag[, mode]])

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

Необязательный аргумент flag может быть:

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

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

Значение Значение
'f' Открыть базу данных в быстром режиме. Записи в базу данных не будут синхронизироваться.
's' Синхронизированный режим. Это приведёт к тому, что изменения в базу данных будут немедленно записаны в файл.
'u' Не блокировать базу данных.

Не все флаги допустимы для всех версий gdbm. Константа модуля open_flags – это строка поддерживаемых символов флагов. Исключение error возбуждается, если указан недопустимый флаг.

Необязательный аргумент mode – это режим Unix для файла, используется только при создании базы данных. По умолчанию равен восьмеричному 0o666.

Помимо методов, подобных словарным, объекты gdbm имеют следующие методы:

gdbm.firstkey()
С помощью этого метода и метода nextkey() можно перебрать все ключи базы данных. Порядок обхода определяется внутренними хеш-значениями gdbm и не соответствует порядку ключей. Этот метод возвращает начальный ключ.
gdbm.nextkey(key)

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

k = db.firstkey()
while k != None:
    print(k)
    k = db.nextkey(k)
gdbm.reorganize()
Если было выполнено много удалений и требуется уменьшить пространство, занимаемое файлом gdbm, эта процедура реорганизует базу данных. Объекты gdbm не будут уменьшать размер файла базы данных иначе как с помощью этой реорганизации; в противном случае удалённое пространство файла сохраняется и повторно используется при добавлении новых пар (ключ, значение).
gdbm.sync()
Когда база данных открыта в быстром режиме, этот метод принудительно записывает на диск все незаписанные данные.

dbm.ndbm – интерфейс на основе ndbmdbm.ndbm – Interface based on ndbm

Платформы: Unix

Модуль dbm.ndbm предоставляет интерфейс к Unix-библиотеке «(n)dbm». Объекты Dbm ведут себя как отображения (словари), за исключением того, что ключи и значения всегда хранятся в виде байт. При выводе объекта dbm не выводятся ключи и значения, а методы items() и values() не поддерживаются.

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

exception dbm.ndbm.error
Возбуждается при ошибках, специфичных для dbm.ndbm, например, при ошибках ввода-вывода. KeyError возбуждается при общих ошибках отображения, таких как указание неверного ключа.
dbm.ndbm.library
Имя используемой библиотеки реализации ndbm.
dbm.ndbm.open(filename[, flag[, mode]])

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

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

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

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

dbm.dumb – Портативная реализация DBMdbm.dumb – Portable DBM implementation

Примечание

Модуль dbm.dumb предназначен в качестве последнего запасного варианта для модуля dbm, когда более надёжный модуль недоступен. Модуль dbm.dumb написан не для скорости и используется не так интенсивно, как другие модули баз данных.

Модуль dbm.dumb предоставляет постоянный интерфейс, похожий на словарь, который полностью написан на Python. В отличие от других модулей, таких как dbm.gnu, не требуется внешняя библиотека. Как и в других постоянных отображениях, ключи и значения всегда хранятся как байты.

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

exception dbm.dumb.error
Возникает при ошибках, специфичных для dbm.dumb, таких как ошибки ввода-вывода. KeyError возникает для общих ошибок отображения, таких как указание неверного ключа.
dbm.dumb.open(filename[, flag[, mode]])

Открывает базу данных dumbdbm и возвращает объект dumbdbm. Аргумент filename – это базовое имя файла базы данных (без каких-либо конкретных расширений). При создании базы данных dumbdbm создаются файлы с расширениями .dat и .dir.

Необязательный аргумент flag в настоящее время игнорируется; база данных всегда открывается для обновления и будет создана, если она не существует.

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

В дополнение к методам, предоставляемым классом collections.MutableMapping, объекты dumbdbm предоставляют следующий метод:

dumbdbm.sync()
Синхронизирует каталог и файлы данных на диске. Этот метод вызывается методом Shelve.sync().