dbm — Интерфейсы к «базам данных» Unix¶
Исходный код: Lib/dbm/__init__.py.
dbm является общим интерфейсом для вариантов базы данных DBM — dbm.gnu или dbm.ndbm. Если ни один из этих модулей не установлен, будет использоваться медленная, но простая реализация в модуле dbm.dumb. Существует third party interface к 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()используется для определения его типа и используется соответствующий модуль; если он не существует, используется первый модуль из перечисленных выше, который может быть импортирован.Необязательный аргумент флаг может быть:
Значение
Значение
'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
# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:
# Record some values
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Note that the keys are considered bytes now.
assert db[b'www.python.org'] == b'Python Website'
# Notice how the value is now in bytes.
assert db['www.cnn.com'] == b'Cable News Network'
# Often-used methods of the dict interface work too.
print(db.get('python.org', b'not present'))
# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4
# db is automatically closed when leaving the with statement.
См.также
- Модуль
shelve Модуль постоянства, который хранит нестроковые данные.
Отдельные подмодули описаны в следующих разделах.
dbm.gnu — GNU переинтерпретирует 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 - это имя файла базы данных.Необязательный аргумент флаг может быть:
Значение
Значение
'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 — Интерфейс на основе 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¶
Исходный код: 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.Необязательный аргумент флаг может быть:
Значение
Значение
'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.
-