Содержание страницы
dbm – Интерфейсы к Unix-«базам данных»¶dbm – Interfaces to Unix “databases”
Исходный код: Lib/dbm/__init__.py
dbm – это универсальный интерфейс к разновидностям базы данных DBM:
Если ни один из этих модулей не установлен, будет использоваться медленная, но простая реализация в модуле dbm.dumb. Существует сторонний интерфейс к Oracle Berkeley DB.
- 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 теперь принимает объект, подобный пути.
- dbm.open(file, flag='r', mode=0o666)¶
Открывает базу данных и возвращает соответствующий объект базы данных.
- Параметры:
file (объект, подобный пути) –
Файл базы данных для открытия.
Если файл базы данных уже существует, для определения его типа используется функция
whichdb(), и применяется соответствующий модуль; если файл не существует, используется первый подмодуль из перечисленных выше, который можно импортировать.flag (str) –
'r'(по умолчанию): Открыть существующую базу данных только для чтения.'w': Открыть существующую базу данных для чтения и записи.'c': Открыть базу данных для чтения и записи, создавая её, если она не существует.'n': Всегда создавать новую пустую базу данных, открытую для чтения и записи.
mode (int) – Режим доступа к файлу в Unix (по умолчанию: восьмеричное
0o666), используется только при создании базы данных.
Изменено в версии 3.11: file теперь принимает объект, подобный пути.
Объект, возвращаемый open(), поддерживает базовую функциональность изменяемых отображений; ключи и соответствующие им значения могут сохраняться, извлекаться и удаляться, а также доступны итерация, оператор in и методы keys(), get(), setdefault() и clear(). Метод keys() возвращает список, а не объект представления. Метод setdefault() требует два аргумента.
Ключи и значения всегда хранятся как bytes. Это означает, что при использовании строк они неявно преобразуются в кодировку по умолчанию перед сохранением.
Эти объекты также поддерживают использование в операторе with, который автоматически закроет их по завершении.
Изменено в версии 3.2: get() и setdefault() методы теперь доступны для всех бэкендов dbm.
Изменено в версии 3.4: Добавлена встроенная поддержка протокола управления контекстом для объектов, возвращаемых open().
Изменено в версии 3.8: Удаление ключа из базы данных только для чтения теперь возбуждает исключение, специфичное для модуля базы данных, вместо KeyError.
Изменено в версии 3.13: clear() методы теперь доступны для всех dbm бэкендов.
Следующий пример записывает несколько имен хостов и соответствующий заголовок, а затем выводит содержимое базы данных:
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.sqlite3 – SQLite-бэкенд для dbm¶dbm.sqlite3 – SQLite backend for dbm
Добавлено в версии 3.13.
Исходный код: Lib/dbm/sqlite3.py
Этот модуль использует модуль стандартной библиотеки sqlite3 для предоставления
SQLite-бэкенда для модуля dbm.
Файлы, созданные dbm.sqlite3, могут быть открыты в sqlite3
или любом другом SQLite-браузере, включая SQLite CLI.
Доступность: не WASI.
Этот модуль не работает или недоступен на WebAssembly. Подробнее см. платформы WebAssembly.
- dbm.sqlite3.open(filename, /, flag='r', mode=0o666)¶
Открывает SQLite-базу данных.
- Параметры:
filename (path-like object) – путь к открываемой базе данных.
flag (str) –
'r'(по умолчанию): открывает существующую базу данных только для чтения.'w': открывает существующую базу данных для чтения и записи.'c': открывает базу данных для чтения и записи, создавая её, если она не существует.'n': всегда создаёт новую пустую базу данных, открытую для чтения и записи.
mode – режим доступа к файлу Unix (по умолчанию: восьмеричное
0o666), используется только при создании базы данных.
Возвращаемый объект базы данных ведёт себя подобно изменяемому mapping, но метод
keys()возвращает список, а методsetdefault()требует два аргумента. Он также поддерживает контекстный менеджер «closing» с помощью ключевого словаwith.Также предоставляется следующий метод:
- sqlite3.close()¶
Закрывает SQLite-базу данных.
dbm.gnu – менеджер баз данных GNU¶dbm.gnu – GNU database manager
Исходный код: Lib/dbm/gnu.py
Модуль dbm.gnu предоставляет интерфейс к библиотеке GDBM,
аналогичный модулю dbm.ndbm, но с дополнительными
возможностями, такими как устойчивость к сбоям.
Примечание
Форматы файлов, созданные dbm.gnu и dbm.ndbm, несовместимы
и не могут использоваться взаимозаменяемо.
Доступность: не Android, не iOS, не WASI.
Этот модуль не поддерживается на мобильных платформах или платформах WebAssembly.
Доступность: Unix.
- exception dbm.gnu.error¶
Возбуждается при ошибках, специфичных для
dbm.gnu, таких как ошибки ввода-вывода.KeyErrorвозбуждается для общих ошибок отображения, например, при указании неверного ключа.
- dbm.gnu.open(filename, flag='r', mode=0o666, /)¶
Открывает базу данных GDBM и возвращает объект
gdbm.- Параметры:
filename (объект, подобный пути) – Файл базы данных для открытия.
flag (str) –
'r'(по умолчанию): Открыть существующую базу данных только для чтения.'w': Открыть существующую базу данных для чтения и записи.'c': Открыть базу данных для чтения и записи, создавая её, если она не существует.'n': Всегда создавать новую пустую базу данных, открытую для чтения и записи.
К строке флага могут быть добавлены следующие дополнительные символы для управления способом открытия базы данных:
'f': Открыть базу данных в быстром режиме. Записи в базу данных не будут синхронизироваться.'s': Синхронизированный режим. Изменения в базе данных будут немедленно записаны в файл.'u': Не блокировать базу данных.
Не все флаги допустимы для всех версий GDBM. Список поддерживаемых символов флагов см. в члене
open_flags.mode (int) – Режим доступа к файлу в стиле Unix (по умолчанию: восьмеричное
0o666), используется только при создании базы данных.
- Возбуждает:
error – Если передан недопустимый аргумент flag.
Изменено в версии 3.11: filename теперь принимает объект, подобный пути.
gdbmобъекты ведут себя аналогично изменяемым отображениям, но методыitems(),values(),pop(),popitem()иupdate()не поддерживаются, методkeys()возвращает список, а методsetdefault()требует двух аргументов. Они также поддерживают контекстный менеджер «closing» с помощью ключевого словаwith.Изменено в версии 3.2: Добавлены методы
get()иsetdefault().Изменено в версии 3.13: Добавлен метод
clear().Также предоставлены следующие методы:
- gdbm.close()¶
Закрывает базу данных GDBM.
- 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()¶
Когда база данных открыта в быстром режиме, этот метод принудительно записывает на диск все незаписанные данные.
dbm.ndbm – Новый менеджер баз данных¶dbm.ndbm – New Database Manager
Исходный код: Lib/dbm/ndbm.py
Модуль dbm.ndbm предоставляет интерфейс к библиотеке
NDBM.
Этот модуль можно использовать как с «классическим» интерфейсом NDBM, так и с
интерфейсом совместимости GDBM.
Примечание
Форматы файлов, созданные с помощью dbm.gnu и dbm.ndbm, несовместимы
и не могут использоваться взаимозаменяемо.
Предупреждение
Библиотека NDBM, поставляемая в составе macOS, имеет недокументированное ограничение на размер значений, что может привести к повреждению файлов базы данных при сохранении значений, превышающих этот лимит. Чтение таких повреждённых файлов может привести к жёсткому сбою (ошибке сегментации).
Доступность: не Android, не iOS, не WASI.
Этот модуль не поддерживается на мобильных платформах или платформах WebAssembly.
Доступность: Unix.
- exception dbm.ndbm.error¶
Возникает при ошибках, специфичных для
dbm.ndbm, например, при ошибках ввода-вывода.KeyErrorвозникает при общих ошибках отображения, например, при указании неверного ключа.
- dbm.ndbm.library¶
Имя используемой библиотеки реализации NDBM.
- dbm.ndbm.open(filename, flag='r', mode=0o666, /)¶
Открывает базу данных NDBM и возвращает объект
ndbm.- Параметры:
имя_файла (объект, подобный пути) – базовое имя файла базы данных (без расширений
.dirили.pag).флаг (str) –
'r'(по умолчанию): открывает существующую базу данных только для чтения.'w': открывает существующую базу данных для чтения и записи.'c': открывает базу данных для чтения и записи, создавая её, если она не существует.'n': всегда создаёт новую пустую базу данных, открытую для чтения и записи.
режим (int) – режим доступа к файлу в Unix (по умолчанию: восьмеричное
0o666), используется только при создании базы данных.
Изменено в версии 3.11: Принимает объект, подобный пути для имени файла.
Объекты
ndbmведут себя как изменяемые отображения, но методыitems(),values(),pop(),popitem(), иupdate()не поддерживаются, методkeys()возвращает список, а методsetdefault()требует два аргумента. Также поддерживается менеджер контекста «закрытие» через ключевое словоwith.Изменено в версии 3.2: Добавлены методы
get()иsetdefault().Изменено в версии 3.13: Добавлен метод
clear().Также предоставляется следующий метод:
- ndbm.close()¶
Закрывает базу данных NDBM.
dbm.dumb – переносимая реализация DBM¶dbm.dumb – Portable DBM implementation
Исходный код: Lib/dbm/dumb.py
Примечание
Модуль dbm.dumb предназначен в качестве запасного варианта для модуля
dbm, когда более надёжный модуль недоступен. Модуль dbm.dumb
не оптимизирован для скорости и используется не так интенсивно, как другие
модули баз данных.
Модуль dbm.dumb предоставляет постоянный (persistent) интерфейс, подобный dict,
полностью написанный на Python.
В отличие от других бэкендов dbm, таких как dbm.gnu, не требуется
внешняя библиотека.
Модуль dbm.dumb определяет следующее:
- exception dbm.dumb.error¶
Возникает при ошибках, специфичных для
dbm.dumb, например, при ошибках ввода-вывода.KeyErrorвозникает при общих ошибках отображения, например, при указании неверного ключа.
- dbm.dumb.open(filename, flag='c', mode=0o666)¶
Открывает базу данных
dbm.dumb.- Параметры:
filename –
Базовое имя файла базы данных (без расширений). При создании новой базы данных появляются следующие файлы:
filename.datfilename.dir
flag (str) –
'r': Открыть существующую базу данных только для чтения.'w': Открыть существующую базу данных для чтения и записи.'c'(по умолчанию): Открыть базу данных для чтения и записи, создавая её, если она не существует.'n': Всегда создавать новую пустую базу данных, открытую для чтения и записи.
mode (int) – режим доступа к файлу Unix (по умолчанию: восьмеричное
0o666), используется только при создании базы данных.
Предупреждение
Интерпретатор Python может аварийно завершиться при загрузке базы данных со достаточно большой/сложной записью из-за ограничений глубины стека в компиляторе AST Python.
Изменено в версии 3.5:
open()всегда создаёт новую базу данных, когда flag равен'n'.Изменено в версии 3.8: База данных открывается только для чтения, если flag равен
'r'. База данных не создаётся, если она не существует, когда flag равен'r'или'w'.Изменено в версии 3.11: filename принимает path-like object.
Возвращаемый объект базы данных ведёт себя подобно изменяемому отображению, но методы
keys()иitems()возвращают списки, а методsetdefault()требует два аргумента. Он также поддерживает контекстный менеджер «closing» через ключевое словоwith.Также предоставляются следующие методы:
- dumbdbm.close()¶
Закрыть базу данных.
- dumbdbm.sync()¶
Синхронизировать каталог на диске и файлы данных. Этот метод вызывается методом
shelve.Shelf.sync().