dbm
— Интерфейсы для «баз данных» Unix¶
Источник: Lib/dbm/__init__.py
dbm
- это общий интерфейс для вариантов базы данных DBM:
Если ни один из этих модулей не установлен, будет использоваться медленная, но простая реализация в модуле dbm.dumb
. Существует third party interface для Oracle Berkeley DB.
Availability: не WASI, не iOS.
Этот модуль не работает или недоступен на платформах WebAssembly или iOS. Дополнительные сведения о доступности WASM см. в разделе Платформы WebAssembly; о доступности iOS - в разделе iOS.
- exception dbm.error¶
Кортеж, содержащий исключения, которые могут быть вызваны каждым из поддерживаемых модулей, с уникальным исключением, также названным
dbm.error
в качестве первого элемента - последнее используется, когда вызваноdbm.error
.
- dbm.whichdb(filename)¶
Эта функция пытается определить, какой из нескольких доступных простых модулей баз данных —
dbm.sqlite3
,dbm.gnu
,dbm.ndbm
илиdbm.dumb
— следует использовать для открытия данного файла.Возвращает одно из следующих значений:
None
, если файл не может быть открыт, потому что он не читается или не существуетпустая строка (
''
), если формат файла не может быть определен.строка, содержащая имя требуемого модуля, например
'dbm.ndbm'
или'dbm.gnu'
.
Изменено в версии 3.11: filename принимает значение path-like object.
- dbm.open(file, flag='r', mode=0o666)¶
Открывает базу данных и возвращает соответствующий объект базы данных.
- Параметры:
file (path-like object) – Файл базы данных, который необходимо открыть. Если файл базы данных уже существует, функция
whichdb()
используется для определения его типа и применяется соответствующий модуль; если он не существует, применяется первый субмодуль из перечисленных выше, который может быть импортирован.flag (str) –
'r'
(по умолчанию): Open existing database for reading only.'w'
: Open existing database for reading and writing.'c'
: Open database for reading and writing, creating it if it doesn’t exist.'n'
: Always create a new, empty database, open for reading and writing.
mode (int) – The Unix file access mode of the file (default: octal
0o666
), used only when the database has to be created.
Изменено в версии 3.11: file принимает 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.sqlite3
— Бэкэнд SQLite для dbm¶
Added in version 3.13.
Источник: Lib/dbm/sqlite3.py
Этот модуль использует модуль стандартной библиотеки sqlite3
для обеспечения бэкенда SQLite для модуля dbm
. Таким образом, файлы, созданные dbm.sqlite3
, могут быть открыты sqlite3
или любым другим браузером SQLite, включая SQLite CLI.
- dbm.sqlite3.open(filename, /, flag='r', mode=0o666)¶
Открыть базу данных SQLite. Возвращаемый объект ведет себя как mapping, реализует метод
close()
и поддерживает «закрывающий» контекстный менеджер с помощью ключевого словаwith
.- Параметры:
filename (path-like object) – Путь к базе данных, которую необходимо открыть.
flag (str) –
'r'
(по умолчанию): Open existing database for reading only.'w'
: Open existing database for reading and writing.'c'
: Open database for reading and writing, creating it if it doesn’t exist.'n'
: Always create a new, empty database, open for reading and writing.
mode – Режим доступа к файлу Unix (по умолчанию: восьмеричный
0o666
), используется только при создании базы данных.
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
.- Параметры:
filename (path-like object) – Файл базы данных, который необходимо открыть.
flag (str) –
'r'
(по умолчанию): Open existing database for reading only.'w'
: Open existing database for reading and writing.'c'
: Open database for reading and writing, creating it if it doesn’t exist.'n'
: Always create a new, empty database, open for reading and writing.
Следующие дополнительные символы могут быть добавлены для управления тем, как открывается база данных:
'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.
- Исключение:
error – Если передан неверный аргумент flag.
Изменено в версии 3.11: filename принимает значение path-like object.
Объекты
gdbm
ведут себя аналогично mappings, но методыitems()
иvalues()
не поддерживаются. Также предоставляются следующие методы:- gdbm.firstkey()¶
С помощью этого метода и метода
nextkey()
можно обойти все ключи в базе данных. Обход упорядочивается по внутренним хэш-значениям GDBM и не будет отсортирован по значениям ключей. Этот метод возвращает начальный ключ.
- 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.
- gdbm.clear()¶
Удалите все элементы из базы данных GDBM.
Added in version 3.13.
dbm.ndbm
— Новый менеджер баз данных¶
Источник: Lib/dbm/ndbm.py
Модуль dbm.ndbm
предоставляет интерфейс к библиотеке NDBM. Этот модуль можно использовать с «классическим» интерфейсом NDBM или с интерфейсом совместимости GDBM.
Примечание
Форматы файлов, созданные dbm.gnu
и dbm.ndbm
, несовместимы и не могут быть использованы как взаимозаменяемые.
Предупреждение
Библиотека NDBM, поставляемая в составе macOS, имеет недокументированное ограничение на размер значений, что может привести к повреждению файлов базы данных при хранении значений, превышающих этот предел. Чтение таких поврежденных файлов может привести к аварийному завершению работы (segmentation fault).
- exception dbm.ndbm.error¶
Возбуждается при
dbm.ndbm
-специфических ошибках, таких как ошибки ввода-вывода.KeyError
вызывается при общих ошибках отображения, например при указании неправильного ключа.
- dbm.ndbm.library¶
Имя используемой библиотеки реализации NDBM.
- dbm.ndbm.open(filename, flag='r', mode=0o666, /)¶
Открывает базу данных NDBM и возвращает объект
ndbm
.- Параметры:
filename (path-like object) – Основное имя файла базы данных (без расширений
.dir
или.pag
).flag (str) –
'r'
(по умолчанию): Open existing database for reading only.'w'
: Open existing database for reading and writing.'c'
: Open database for reading and writing, creating it if it doesn’t exist.'n'
: Always create a new, empty database, open for reading and writing.
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.
- ndbm.clear()¶
Удалите все элементы из базы данных NDBM.
Added in version 3.13.
dbm.dumb
— Переносная реализация DBM¶
Источник: 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()
.- Параметры:
filename – Основное имя файла базы данных (без расширений). При создании новой базы данных создаются следующие файлы: -
filename.dat
-filename.dir
flag (str) –
'r'
: Open existing database for reading only.'w'
: Open existing database for reading and writing.'c'
(по умолчанию): Open database for reading and writing, creating it if it doesn’t exist.'n'
: Always create a new, empty database, open for reading and writing.
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: База данных открыта только для чтения, если flag равен
'r'
. База данных не создается, если она не существует, если флаг равен'r'
или'w'
.Изменено в версии 3.11: filename принимает значение path-like object.
В дополнение к методам, предоставляемым классом
collections.abc.MutableMapping
, предоставляются следующие методы:- dumbdbm.sync()¶
Синхронизация каталога на диске и файлов данных. Этот метод вызывается методом
Shelve.sync()
.
- dumbdbm.close()¶
Закройте базу данных.