Сообщить об ошибке.

Модуль dbm в Python, базы dbm.gnu и dbm.ndbm

Интерфейсы к базам данных dbm.gnu или dbm.ndbm

Модуль dbm - это универсальный интерфейс для вариантов базы данных DBM - dbm.gnu или dbm.ndbm. Если ни один из этих модулей не установлен, будет использоваться медленная, но простая реализация в модуле dbm.dumb.

База данных DBM это платформенно-независимый механизм для хранения строк в файле как в хеше. И ключ, и ассоциированные с ним данные должны быть строками. DBM можно считать простейшим движком баз данных.

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

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

Функция dbm.open() открывает файл file базы данных и возвращает соответствующий объект, похожий на словарь.

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

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

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

ЗначениеСмысл
'r'Открыть существующую базу данных только для чтения (по умолчанию)
'w'Откройте существующую базу данных для чтения и записи
'c'Откройте базу данных для чтения и записи, создавая ее, если ее не существует
'n'Всегда создает новую пустую базу данных, открытую для чтения и записи

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

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

Функция dbm.open() также поддерживают использование в операторе with, который автоматически закроет базу данных по завершении.

dbm.whichdb(filename):

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

Возвращает одно из следующих значений:

  • None, если файл не может быть открыт из-за того, что он не читается или не существует;
  • Пустая строка '', если формат файла не может быть определен;
  • Строка, содержащая имя требуемого модуля, например: dbm.ndbm или dbm.gnu.

dbm.error:

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

>>> import dbm
>>> dbm.error
# (<class 'dbm.error'>, <class 'OSError'>)

Примеры использования:

import dbm

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

    # Запишем некоторые значения
    db['www.python.org'] = 'Python Website'
    db['docs-python.ru'] = 'Python information Hub'
    

    # Обратите внимание, что ключи можно указывать
    # как байтовые строки.
    assert db[b'www.python.org'] == b'Python Website'
    # Обратите внимание, что тип значения ключа теперь в байтах.
    assert db['docs-python.ru'] == b'Python information Hub'

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

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

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

# Добавим значение в базу 'cache'
with dbm.open('cache', 'c') as db:
    db['hello'] = 'World'
    
# прочитаем базу 'cache'
with dbm.open('cache', 'c') as db:
    a = db['www.python.org']
    b = db['docs-python.ru']
    c = db['hello']    

>>> print(a, b, c)
# b'Python Website' b'Python information Hub' b'World'

>>> dbm.whichdb('cache')
# 'dbm.gnu'