dbm — Интерфейсы к «базам данных» Unix

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


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'

Изменено в версии 3.11: имя файла принимает значение path-like object.

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

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

Parameters:
  • file (path-like object) – Файл базы данных для открытия. Если файл базы данных уже существует, то для определения его типа используется функция whichdb() и используется соответствующий модуль; если он не существует, используется первый из перечисленных выше подмодулей, который можно импортировать.

  • flag (str) –

  • mode (int) – The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

Изменено в версии 3.11: файл принимает значение path-like object.

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

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

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

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

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

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

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

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

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


Модуль dbm.gnu предоставляет интерфейс для библиотеки GDBM, аналогичный модулю dbm.ndbm, но с дополнительной функциональностью, такой как устойчивость к сбоям.

Примечание

Форматы файлов, созданные с помощью dbm.gnu и dbm.ndbm, несовместимы и не могут использоваться как взаимозаменяемые.

exception dbm.gnu.error

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

dbm.gnu.open(filename, flag='r', mode=0o666, /)

Откройте базу данных GDBM и верните объект gdbm.

Parameters:
  • filename (path-like object) – Файл базы данных, который нужно открыть.

  • flag (str) –

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

    • 'f': Откройте базу данных в ускоренном режиме. Запись в базу данных синхронизироваться не будет.

    • 's': Синхронизированный режим. Изменения в базе данных будут немедленно записаны в файл.

    • 'u': Не блокируйте базу данных.

    Не все флаги действительны для всех версий GDBM. Список поддерживаемых символов флага приведен в элементе open_flags.

  • mode (int) – The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

Exception:

error – Если передан недопустимый аргумент flag.

Изменено в версии 3.11: имя файла принимает значение path-like object.

dbm.gnu.open_flags

Строка символов, которую поддерживает параметр flag параметра open().

gdbm объекты ведут себя аналогично mappings, но методы items() и values() не поддерживаются. Также предусмотрены следующие методы:

gdbm.firstkey()

Можно выполнить цикл по каждому ключу в базе данных, используя этот метод и метод nextkey(). Обход упорядочен по внутренним хэш-значениям СУБД и не будет отсортирован по значениям ключей. Этот метод возвращает начальный ключ.

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 — Новый менеджер баз данных

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


Модуль dbm.ndbm предоставляет интерфейс для библиотеки NDBM. Этот модуль может использоваться с «классическим» интерфейсом СУБД или интерфейсом совместимости GDBM.

Примечание

Форматы файлов, созданные с помощью dbm.gnu и dbm.ndbm, несовместимы и не могут использоваться как взаимозаменяемые.

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

Библиотека NDBM, поставляемая в составе macOS, имеет недокументированное ограничение на размер значений, что может привести к повреждению файлов базы данных при хранении значений, превышающих это ограничение. Чтение таких поврежденных файлов может привести к сбою (ошибка сегментации).

exception dbm.ndbm.error

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

dbm.ndbm.library

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

dbm.ndbm.open(filename, flag='r', mode=0o666, /)

Откройте базу данных NDBM и верните объект ndbm.

Parameters:
  • filename (path-like object) – Базовое имя файла базы данных (без расширений .dir или .pag).

  • flag (str) –

  • mode (int) – The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

ndbm объекты ведут себя аналогично mappings, но методы items() и values() не поддерживаются. Также предусмотрены следующие методы:

Изменено в версии 3.11: Принимает path-like object в качестве имени файла.

ndbm.close()

Закройте базу данных NDBM.

dbm.dumb — Реализация портативной СУБД

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

Примечание

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


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

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

exception dbm.dumb.error

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

dbm.dumb.open(filename, flag='c', mode=0o666)

Откройте базу данных dbm.dumb. Возвращаемый объект базы данных ведет себя аналогично объекту mapping, в дополнение к предоставлению методов sync() и close().

Parameters:
  • filename – Базовое имя файла базы данных (без расширений). В новой базе данных создаются следующие файлы: - filename.dat - filename.dir

  • flag (str) –

  • mode (int) – The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

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

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

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

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

Изменено в версии 3.11: имя файла принимает значение path-like object.

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

dumbdbm.sync()

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

dumbdbm.close()

Закройте базу данных.

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