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

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

Исходный код: Lib/dbm/__init__.py


dbm – это универсальный интерфейс к разновидностям базы данных DBM: dbm.gnu или dbm.ndbm. Если ни один из этих модулей не установлен, будет использоваться медленная, но простая реализация из модуля dbm.dumb. Существует также сторонний интерфейс к Oracle Berkeley DB.

exception dbm.error

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

dbm.whichdb(filename)

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

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

dbm.open(file, flag='r', mode=0o666)

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

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

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

Значение

Значение

'r'

Открыть существующую базу данных только для чтения (по умолчанию)

'w'

Открыть существующую базу данных для чтения и записи

'c'

Открыть базу данных для чтения и записи, создавая её, если она не существует

'n'

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

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

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

Изменено в версии 3.2: get() и setdefault() теперь доступны во всех модулях баз данных.

Изменено в версии 3.8: Удаление ключа из базы данных, открытой только для чтения, вызывает ошибку, специфичную для модуля базы данных, вместо KeyError.

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

Эти объекты также поддерживают использование в операторе with, который автоматически закроет их по завершении.

Изменено в версии 3.4: Добавлена встроенная поддержка протокола управления контекстом для объектов, возвращаемых open().

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

import dbm

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

    # Записать несколько значений.
    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'

    # Часто используемые методы интерфейса dict также работают.
    print(db.get('python.org', b'not present'))

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

# db автоматически закрывается при выходе из оператора with.

См. также

Модуль shelve

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

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

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

Исходный код: Lib/dbm/gnu.py


Этот модуль очень похож на модуль 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 is not None:
    print(k)
    k = db.nextkey(k)
gdbm.reorganize()

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

gdbm.sync()

Когда база данных открыта в быстром режиме, этот метод принудительно записывает на диск все незаписанные данные.

gdbm.close()

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

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

Исходный код: Lib/dbm/ndbm.py


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

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

exception dbm.ndbm.error

Возникает при ошибках, специфичных для dbm.ndbm, например, при ошибках ввода-вывода. KeyError возникает при общих ошибках отображения, например, при указании неверного ключа.

dbm.ndbm.library

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

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

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

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

Значение

Значение

'r'

Открыть существующую базу данных только для чтения (по умолчанию)

'w'

Открыть существующую базу данных для чтения и записи

'c'

Открыть базу данных для чтения и записи, создав её, если она не существует

'n'

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

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

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

ndbm.close()

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

dbm.dumb – переносимая реализация DBMdbm.dumb – Portable DBM implementation

Исходный код: Lib/dbm/dumb.py

Примечание

Модуль 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 может быть:

Значение

Значение

'r'

Открыть существующую базу данных только для чтения (по умолчанию)

'w'

Открыть существующую базу данных для чтения и записи

'c'

Открыть базу данных для чтения и записи, создав её, если она не существует

'n'

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

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

Предупреждение

Интерпретатор Python может аварийно завершиться при загрузке базы данных со достаточно большой/сложной записью из-за ограничений глубины стека в компиляторе AST Python.

Изменено в версии 3.5: open() всегда создаёт новую базу данных, если флаг имеет значение 'n'.

Изменено в версии 3.8: База данных, открытая с флагами 'r', теперь доступна только для чтения. Открытие с флагами 'r' и 'w' больше не создаёт базу данных, если она не существует.

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

dumbdbm.sync()

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

dumbdbm.close()

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