Содержание страницы
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() теперь доступны во всех модулях баз данных.
Ключи и значения всегда хранятся в виде байтов. Это означает, что при использовании строк они неявно преобразуются в кодировку по умолчанию перед сохранением.
Эти объекты также поддерживают использование в операторе 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 библиотеки dbm¶dbm.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 != None: print(k) k = db.nextkey(k)
-
gdbm.reorganize()¶ Если было выполнено много удалений и требуется уменьшить пространство, занимаемое файлом
gdbm, эта процедура проведёт реорганизацию базы данных. Объектыgdbmне сокращают длину файла базы данных, кроме как с помощью этой реорганизации; в противном случае освободившееся пространство сохраняется и повторно используется при добавлении новых пар (ключ, значение).
-
gdbm.sync()¶ Когда база данных открыта в быстром режиме, этот метод принудительно записывает на диск все незаписанные данные.
-
gdbm.close()¶ Закрыть базу данных
gdbm.
-
dbm.ndbm – интерфейс на основе ndbm¶dbm.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 – переносимая реализация DBM¶dbm.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 поддерживает только семантику значений
'c'и'n'. Другие значения по умолчанию открывают базу данных для обновления, и она будет создана, если не существует.Необязательный аргумент mode – это режим файла Unix, используемый только при создании базы данных. По умолчанию это восьмеричное
0o666(и будет изменено текущей umask).Предупреждение
Интерпретатор Python может аварийно завершиться при загрузке базы данных со достаточно большой/сложной записью из-за ограничений глубины стека в компиляторе AST Python.
Изменено в версии 3.5:
open()всегда создаёт новую базу данных, если флаг имеет значение'n'.Устарело с версии 3.6, будет удалено в версии 3.8: Создание базы данных в режимах
'r'и'w'. Изменение базы данных в режиме'r'.В дополнение к методам, предоставляемым классом
collections.abc.MutableMapping, объектыdumbdbmпредоставляют следующие методы:-
dumbdbm.sync()¶ Синхронизировать каталог на диске и файлы данных. Этот метод вызывается методом
Shelve.sync().
-
dumbdbm.close()¶ Закрыть базу данных
dumbdbm.
-