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.

Вернуться на верх