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

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


dbm - общий интерфейс для различных баз данных DBM — dbm.gnu или dbm.ndbm. Если ни один из этих модулей не будет установлен, то будет использоваться медленная-но-простая реализация в модуле dbm.dumb. Существует сторонний интерфейс к Oracle Berkeley БД.

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(), чтобы определить его тип, и соответствующий используемый модуль; если он не существует, используется первый модуль, указанный выше, который можно импортировать.

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

Значение Смысл
'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

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

    # Записать некоторые значения
    db[b'hello'] = b'there'
    db['www.python.org'] = 'Python Website'
    db['www.cnn.com'] = 'Cable News Network'

    # Обратите внимание, что ключи теперь считаются байтами.
    assert db[b'www.python.org'] == b'Python Website'
    # Обратите внимание, значение теперь в байтах.
    assert db['www.cnn.com'] == b'Cable News Network'

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

    # Сохранение нестрокового ключа или значения поднимет исключение (скорее всего,
    # TypeError).
    db['www.yahoo.com'] = 4

# db автоматически закрывается при выходе из with инструкции.

См.также

Модуль shelve
Модуль сохраняемости, который хранит не строковые данные.

Отдельные подмодули описаны в следующих разделах.

dbm.gnu — Реинтерпретация GNU dbm

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


Этот модуль весьма схож с модулем dbm, но использует библиотеку GNU gdbm вместо этого, чтобы обеспечить некоторую дополнительную функциональность. Обратите внимание, что форматы файлов, созданные dbm.gnu и dbm.ndbm, несовместимы.

Модуль dbm.gnu обеспечивает интерфейс с библиотекой DBM GNU. dbm.gnu.gdbm объекты ведут себя как сопоставления (словари), за исключением того, что ключи и значения всегда преобразуются в байты перед сохранением. При печати объекта gdbm ключи и значения не печатаются, а методы items() и values() не поддерживаются.

exception dbm.gnu.error

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

dbm.gnu.open(filename[, flag[, mode]])

Открыть базу данных gdbm и вернуть объект gdbm. Аргумент filename является именем файла базы данных.

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

Значение Смысл
'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 != 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 или интерфейсом совместимости GDBM GNU. В Unix сценарий configure попытается найти соответствующий файл заголовка для упрощения построения этого модуля.

exception dbm.ndbm.error

Поднимается при ошибках dbm.ndbm-специфичных, таких как ошибки I/O. 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-специфичных, таких как ошибки I/O. Поднимается KeyError для общих ошибок сопоставления, таких как указание неправильного ключа.

dbm.dumb.open(filename[, flag[, mode]])

Открыть базу данных dumbdbm и возвращает объект dumbdbm. Аргумент filename является основным именем файла базы данных (без специальных расширений). При создании базы данных dumbdbm создаются файлы с расширениями .dat и .dir.

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

Значение Смысл
'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.