Модуль 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'