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.
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:
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:
Предупреждение
Возможно аварийное завершение работы интерпретатора 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()¶
Закройте базу данных.