Модуль dbm.gnu
очень похож на модуль dbm
, но для доступа к базе использует библиотеку GNU gdbm, которая предоставляет некоторые дополнительные функции.
Обратите внимание, что форматы файлов, созданные dbm.gnu
и dbm.ndbm
- несовместимы.
Модуль dbm.gnu
предоставляет интерфейс к библиотеке GNU DBM. Объекты dbm.gnu.gdbm
ведут себя как отображения (словари), за исключением того, что ключи и значения всегда преобразуются в байтовые строки перед сохранением. При печати объекта gdbm
ключи и значения не выводятся, а методы dict.items()
и dict.values()
не поддерживаются.
dbm.gnu.open(filename[, flag[, mode]])
:Функция dbm.gnu.open()
откроет базу данных gdbm
и вернет объект gdbm
. Аргумент filename
- это имя файла базы данных.
Необязательный аргумент flag
может быть:
Значение | Смысл |
'r' | Открыть существующую базу данных только для чтения (по умолчанию) |
'w' | Откройте существующую базу данных для чтения и записи |
'c' | Откройте базу данных для чтения и записи, создавая ее, если ее не существует |
'n' | Всегда создает новую пустую базу данных, открытую для чтения и записи |
Следующие дополнительные символы могут быть добавлены к аргументу flag
для управления открытием базы данных:
Значение | Смысл |
'f' | Откройте базу данных в быстром режиме. Запись в базу данных не будет синхронизирована. |
's' | Синхронизированный режим. Это приведет к немедленной записи изменений в базу данных в файл. |
'u' | Откройте базу данных в неблокирующем режиме. |
Не все флаги действительны для всех версий gdbm
. Если указан недопустимый флаг, то возникает исключение.
Необязательный аргумент mode
- это режим Unix файла, используемый только тогда, когда необходимо создать базу данных. По умолчанию это восьмеричное число 0o666
.
В дополнение к методам, подобным словарю, объекты gdbm
имеют следующие методы:
gdbm.firstkey()
:Метод gdbm.firstkey()
возвращает начальный ключ базы данных.
Можно перебрать каждый ключ в базе данных с помощью этого метода и метода gdbm.nextkey()
. Обход упорядочен по внутренним значениям хеш-функции gdbm
и не будет отсортирован по ключевым значениям.
gdbm.nextkey(key)
:Метод gdbm.nextkey()
возвращает ключ, следующий ключ при обходе. Следующий код печатает каждый ключ из базы данных, без необходимости создавать список всех ключей в памяти:
k = db.firstkey() while k != None: print(k) k = db.nextkey(k)
gdbm.reorganize()
:Если производится много удалений и необходимо уменьшить пространство, используемое файлом gdbm
, эта процедура реорганизует базу данных.
Объекты GDBM
не сокращают длину файла базы данных, кроме как с помощью gdbm.reorganize()
. В противном случае удаленное файловое пространство будет сохранено и повторно использовано при добавлении новых пар (key, value)
.
gdbm.sync()
:Когда база данных была открыта в быстром режиме, то метод gdbm.sync()
принудительно записывает все не записанные данные на диск.
gdbm.close()
:Метод gdbm.close()
закрывает базу данных GDBM
.