dbm
— Интерфейсы к «базам данных» Unix¶
Исходный код: Lib/dbm/__init__.py.
dbm
является общим интерфейсом для вариантов базы данных 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'
.
-
dbm.
open
(file, flag='r', mode=0o666)¶ Открыть файл базы данных file и вернуть соответствующий объект.
Если файл базы данных уже существует, функция
whichdb()
используется для определения его типа и используется соответствующий модуль; если он не существует, используется первый модуль из перечисленных выше, который может быть импортирован.Необязательный аргумент флаг может быть:
Значение
Значение
'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
# 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 переинтерпретирует dbm¶
Исходный код: Lib/dbm/gnu.py.
Этот модуль очень похож на модуль dbm
, но использует вместо него библиотеку GNU gdbm
для обеспечения некоторой дополнительной функциональности. Обратите внимание, что форматы файлов, создаваемые dbm.gnu
и dbm.ndbm
, несовместимы.
Модуль dbm.gnu
предоставляет интерфейс к библиотеке GNU DBM. Объекты dbm.gnu.gdbm
ведут себя как отображения (словари), за исключением того, что ключи и значения всегда преобразуются в байты перед сохранением. При печати объекта gdbm
не выводятся ключи и значения, а методы items()
и values()
не поддерживаются.
-
exception
dbm.gnu.
error
¶ Возникает при специфических ошибках
dbm.gnu
, таких как ошибки ввода/вывода.KeyError
вызывается при общих ошибках отображения, например, при указании неправильного ключа.
-
dbm.gnu.
open
(filename[, flag[, mode]])¶ Открыть базу данных
gdbm
и вернуть объектgdbm
. Аргумент filename - это имя файла базы данных.Необязательный аргумент флаг может быть:
Значение
Значение
'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 is not 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 или с интерфейсом совместимости GNU GDBM. На Unix скрипт configure попытается найти соответствующий заголовочный файл, чтобы упростить сборку этого модуля.
-
exception
dbm.ndbm.
error
¶ Возникает при специфических ошибках
dbm.ndbm
, таких как ошибки ввода/вывода.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
, таких как ошибки ввода/вывода.KeyError
вызывается при общих ошибках отображения, например, при указании неправильного ключа.
-
dbm.dumb.
open
(filename[, flag[, mode]])¶ Открыть базу данных
dumbdbm
и вернуть объект dumbdbm. Аргумент filename - это основное имя файла базы данных (без каких-либо конкретных расширений). При создании базы данных dumbdbm создаются файлы с расширениями.dat
и.dir
.Необязательный аргумент флаг может быть:
Значение
Значение
'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
.
-