Документация Python неофициальный перевод

dbm.md

264 строк · 17.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.0/library/dbm.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `dbm` – Интерфейсы к Unix-«базам данных»89**`dbm` – универсальный интерфейс к разновидностям базы данных DBM –**1011`dbm.gnu`1213или1415`dbm.ndbm`1617. Если ни один из этих модулей не установлен, будет использована медленная, но простая реализация из модуля1819`dbm.dumb`2021. Существует2223[сторонний интерфейс](https://python-all.ru/3.0/library/dbm.html)2425к Oracle Berkeley DB.2627#### `[dbm.error]exception dbm.error`2829Кортеж, содержащий исключения, которые могут быть возбуждены каждым из поддерживаемых модулей, причём уникальное исключение с тем же именем3031[`dbm.error`](https://python-all.ru/3.0/library/dbm.html#dbm.error)3233является первым элементом – последнее используется, когда возбуждается3435[`dbm.error`](https://python-all.ru/3.0/library/dbm.html#dbm.error)3637.3839#### `[dbm.whichdb]dbm.whichdb(filename)`4041Эта функция пытается угадать, какой из нескольких простых модулей баз данных – `dbm.bsd`, `dbm.gnu`, `dbm.ndbm` или `dbm.dumb` – следует использовать для открытия заданного файла.4243Возвращает одно из следующих значений: `None`, если файл не может быть открыт, так как он нечитаем или не существует; пустую строку (`''`), если формат файла не удаётся определить; или строку, содержащую имя требуемого модуля, например `'dbm.ndbm'` или `'dbm.gnu'`.4445#### `[dbm.open]dbm.open(filename[, flag[, mode]])`4647Открывает файл базы данных *filename* и возвращает соответствующий объект.4849Если файл базы данных уже существует, функция [`whichdb()`](https://python-all.ru/3.0/library/dbm.html#dbm.whichdb) используется для определения его типа, и используется соответствующий модуль; если он не существует, используется первый модуль из перечисленных выше, который можно импортировать.5051Необязательный аргумент *flag* может быть `'r'` для открытия существующей базы данных только на чтение, `'w'` для открытия существующей базы данных на чтение и запись, `'c'` для создания базы данных, если она не существует, или `'n'`, который всегда создаёт новую пустую базу данных. Если не указан, значение по умолчанию – `'r'`.5253Необязательный аргумент *mode* – это режим Unix для файла, используется только при создании базы данных. По умолчанию равен восьмеричному `0o666` (и будет изменён в соответствии с текущей umask).5455Объект, возвращаемый [`open()`](https://python-all.ru/3.0/library/functions.html#open), поддерживает почти те же возможности, что и словари: можно сохранять, получать и удалять ключи и соответствующие им значения; также доступны оператор [`in`](https://python-all.ru/3.0/reference/expressions.html#in) и метод `keys()`. Ключи и значения всегда хранятся в виде байт. Это означает, что при использовании строк они неявно преобразуются в кодировку по умолчанию перед сохранением.5657Следующий пример записывает несколько имен хостов и соответствующий заголовок, а затем выводит содержимое базы данных:5859```python60import dbm6162# Открыть базу данных, создав её при необходимости.63db = dbm.open('cache', 'c')6465# Записать несколько значений.66db[b'hello'] = b'there'67db['www.python.org'] = 'Python Website'68db['www.cnn.com'] = 'Cable News Network'6970# Обратите внимание: теперь ключи считаются байтами.71assert db[b'www.python.org'] == b'Python Website'72# Обратите внимание, что теперь значение хранится в байтах.73assert db['www.cnn.com'] == b'Cable News Network'7475# Перебор содержимого.  Другие методы словаря76# такие как .keys(), .values() также работают.77for k, v in db.iteritems():78    print(k, '\t', v)7980# Сохранение нестрокового ключа или значения вызовет исключение (скорее всего,81# TypeError).82db['www.yahoo.com'] = 48384# Закрыть после завершения.85db.close()86```8788> **См. также**89>90> **Модуль [`shelve`](https://python-all.ru/3.0/library/shelve.html#module-shelve)**91>92> Модуль персистентности, который хранит нестроковые данные.9394Отдельные подмодули описаны в следующих разделах.9596## `dbm.gnu` – переосмысление dbm от GNU9798*Платформы:* Unix99100Этот модуль во многом похож на модуль `dbm`, но использует библиотеку GNU `gdbm`, чтобы предоставить некоторые дополнительные возможности. Обратите внимание, что форматы файлов, создаваемые `dbm.gnu` и `dbm.ndbm`, несовместимы.101102Модуль `dbm.gnu` предоставляет интерфейс к библиотеке GNU DBM. Объекты `dbm.gnu.gdbm` ведут себя как отображения (словари), за исключением того, что ключи и значения всегда преобразуются в байты перед сохранением. При выводе объекта `gdbm` не выводятся ключи и значения, а методы `items()` и `values()` не поддерживаются.103104#### `[dbm.gnu.error]exception dbm.gnu.error`105106Возбуждается при ошибках, специфичных для107108`dbm.gnu`109110, например, при ошибках ввода-вывода.111112[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)113114возбуждается при общих ошибках отображения, таких как указание неверного ключа.115116#### `[dbm.gnu.open]dbm.gnu.open(filename[, flag[, mode]])`117118Открывает базу данных `gdbm` и возвращает объект `gdbm`. Аргумент *filename* – это имя файла базы данных.119120Необязательный аргумент *flag* может быть:121122| Значение | Значение |123| --- | --- |124| `'r'` | Открыть существующую базу данных только для чтения (по умолчанию) |125| `'w'` | Открыть существующую базу данных для чтения и записи |126| `'c'` | Открыть базу данных для чтения и записи, создав её, если она не существует |127| `'n'` | Всегда создавать новую пустую базу данных, открытую для чтения и записи |128129Следующие дополнительные символы могут быть добавлены к флагу для управления тем, как открывается база данных:130131| Значение | Значение |132| --- | --- |133| `'f'` | Открыть базу данных в быстром режиме. Записи в базу данных не будут синхронизироваться. |134| `'s'` | Синхронизированный режим. Это приведёт к тому, что изменения в базу данных будут немедленно записаны в файл. |135| `'u'` | Не блокировать базу данных. |136137Не все флаги допустимы для всех версий `gdbm`. Константа модуля `open_flags` – это строка поддерживаемых символов флагов. Исключение [`error`](https://python-all.ru/3.0/library/dbm.html#dbm.gnu.error) возбуждается, если указан недопустимый флаг.138139Необязательный аргумент *mode* – это режим Unix для файла, используется только при создании базы данных. По умолчанию равен восьмеричному `0o666`.140141Помимо методов, подобных словарным, объекты `gdbm` имеют следующие методы:142143#### `[dbm.gnu.gdbm.firstkey]gdbm.firstkey()`144145С помощью этого метода и метода146147[`nextkey()`](https://python-all.ru/3.0/library/dbm.html#dbm.gnu.gdbm.nextkey)148149можно перебрать все ключи базы данных. Порядок обхода определяется внутренними хеш-значениями150151`gdbm`152153и не соответствует порядку ключей. Этот метод возвращает начальный ключ.154155#### `[dbm.gnu.gdbm.nextkey]gdbm.nextkey(key)`156157Возвращает ключ, следующий за *key* в порядке обхода. Следующий код выводит все ключи базы данных `db`, не создавая в памяти список, содержащий их все:158159```python160k = db.firstkey()161while k != None:162    print(k)163    k = db.nextkey(k)164```165166#### `[dbm.gnu.gdbm.reorganize]gdbm.reorganize()`167168Если было выполнено много удалений и требуется уменьшить пространство, занимаемое файлом169170`gdbm`171172, эта процедура реорганизует базу данных. Объекты173174`gdbm`175176не будут уменьшать размер файла базы данных иначе как с помощью этой реорганизации; в противном случае удалённое пространство файла сохраняется и повторно используется при добавлении новых пар (ключ, значение).177178#### `[dbm.gnu.gdbm.sync]gdbm.sync()`179180Когда база данных открыта в быстром режиме, этот метод принудительно записывает на диск все незаписанные данные.181182## `dbm.ndbm` – интерфейс на основе ndbm183184*Платформы:* Unix185186Модуль `dbm.ndbm` предоставляет интерфейс к Unix-библиотеке «(n)dbm». Объекты Dbm ведут себя как отображения (словари), за исключением того, что ключи и значения всегда хранятся в виде байт. При выводе объекта `dbm` не выводятся ключи и значения, а методы `items()` и `values()` не поддерживаются.187188Этот модуль можно использовать с «классическим» интерфейсом ndbm, интерфейсом совместимости BSD DB или интерфейсом совместимости GNU GDBM. В Unix сценарий **configure** попытается найти соответствующий заголовочный файл, чтобы упростить сборку этого модуля.189190#### `[dbm.ndbm.error]exception dbm.ndbm.error`191192Возбуждается при ошибках, специфичных для193194`dbm.ndbm`195196, например, при ошибках ввода-вывода.197198[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)199200возбуждается при общих ошибках отображения, таких как указание неверного ключа.201202#### `[dbm.ndbm.library]dbm.ndbm.library`203204Имя используемой библиотеки реализации205206`ndbm`207208.209210#### `[dbm.ndbm.open]dbm.ndbm.open(filename[, flag[, mode]])`211212Открывает базу данных dbm и возвращает объект `dbm`. Аргумент *filename* – это имя файла базы данных (без расширений `.dir` или `.pag`; обратите внимание, что реализация интерфейса BSD DB добавляет расширение `.db` и создаёт только один файл).213214Необязательный аргумент *flag* должен быть одним из следующих значений:215216| Значение | Значение |217| --- | --- |218| `'r'` | Открыть существующую базу данных только для чтения (по умолчанию) |219| `'w'` | Открыть существующую базу данных для чтения и записи |220| `'c'` | Открыть базу данных для чтения и записи, создав её, если она не существует |221| `'n'` | Всегда создавать новую пустую базу данных, открытую для чтения и записи |222223Необязательный аргумент *mode* – это режим Unix для файла, используется только при создании базы данных. По умолчанию равен восьмеричному `0o666` (и будет изменён в соответствии с текущей umask).224225## `dbm.dumb` – Портативная реализация DBM226227> **Примечание**228>229> Модуль `dbm.dumb` предназначен в качестве последнего запасного варианта для модуля `dbm`, когда более надёжный модуль недоступен. Модуль `dbm.dumb` написан не для скорости и используется не так интенсивно, как другие модули баз данных.230231Модуль `dbm.dumb` предоставляет постоянный интерфейс, похожий на словарь, который полностью написан на Python. В отличие от других модулей, таких как `dbm.gnu`, не требуется внешняя библиотека. Как и в других постоянных отображениях, ключи и значения всегда хранятся как байты.232233Модуль определяет следующее:234235#### `[dbm.dumb.error]exception dbm.dumb.error`236237Возникает при ошибках, специфичных для238239`dbm.dumb`240241, таких как ошибки ввода-вывода.242243[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)244245возникает для общих ошибок отображения, таких как указание неверного ключа.246247#### `[dbm.dumb.open]dbm.dumb.open(filename[, flag[, mode]])`248249Открывает базу данных `dumbdbm` и возвращает объект dumbdbm. Аргумент *filename* – это базовое имя файла базы данных (без каких-либо конкретных расширений). При создании базы данных dumbdbm создаются файлы с расширениями `.dat` и `.dir`.250251Необязательный аргумент *flag* в настоящее время игнорируется; база данных всегда открывается для обновления и будет создана, если она не существует.252253Необязательный аргумент *mode* – это Unix-режим файла, используемый только при создании базы данных. По умолчанию он равен восьмеричному `0o666` (и будет изменён действующей маской umask).254255В дополнение к методам, предоставляемым классом `collections.MutableMapping`, объекты `dumbdbm` предоставляют следующий метод:256257#### `[dbm.dumb.dumbdbm.sync]dumbdbm.sync()`258259Синхронизирует каталог и файлы данных на диске. Этот метод вызывается методом260261`Shelve.sync()`262263.264