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
.
-