Модуль Python DBM для Windows?

Я хотел бы использовать модуль dbm на своем компьютере с Windows, но в настоящее время он поддерживается только в Unix. http://docs.python.org/library/dbm.html

Кто-нибудь знает аналогичный модуль с похожим синтаксисом или обходной путь, чтобы заставить dmb функционировать в Windows? Было бы здорово получить доступ к базе данных, записанной на жесткий диск, подобно тому, как я кодирую доступ к словарю. Спасибо за помощь!


person Brian    schedule 04.08.2010    source источник
comment
Вы используете cpython в Windows?   -  person Laurion Burchall    schedule 05.08.2010
comment
GNUdbm и ndbm, похоже, не поддерживаются в Windows: stackoverflow.com/questions/64909747/   -  person Basj    schedule 19.11.2020


Ответы (4)


На самом деле, погуглив больше, я нашел это:

http://docs.python.org/library/anydbm.html#module-anydbm

Я пробовал это на Windows, и, кажется, работает нормально =)

person Brian    schedule 04.08.2010
comment
Если вы выполняете бенчмаркинг с Python 2 в Windows, вас ждет удовольствие при переходе на Python 3, поскольку dbm возвращается к dumbdbm, который является собственной самопровозглашенной хромой реализацией dbm в Python, тогда как в Python 2 он поддерживает гораздо более быструю БД Беркли. Чтобы избежать использования тупой базы данных в Py3/Win, я использовал как LMDB, так и semidbm, и в итоге написал собственный обходной путь, Маленький - person Jay; 15.07.2017
comment
docs.python.org/3/library/anydbm.html: 404 Нет Нашел. Они удалили это? Как использовать gnu dbm в Windows? - person Basj; 19.11.2020
comment
Попробуйте следующее: docs.python.org/3/library/dbm.html - person yoonghm; 26.11.2020

На основе следующего теста в системе Windows 7 с использованием Python 2.7.2 видно, что dbhash поддерживается в установках Windows.

import os

import anydbm

import whichdb

file = os.curdir + '/testdbm'   # define a test file name in the current directory

d = anydbm.open(file, 'c')      # create a new database using the test file name

db_type = whichdb.whichdb(file) # get the dbm database type

print(db_type)                  # display the result

'dbhash'
person Steve Wood    schedule 15.03.2012

Если Python 3 имеет значение, я бы выбрал внешнее решение kv, например dumbdbm это не радость.

Некоторые варианты чистого Python:

  • semidbm — более быстрая альтернатива dumpdbm, только стандартная библиотека Python, пип и вперед. Тот, который я бы выбрал, если хочу обеспечить переносимость и доступность для пользователей.

  • PickleDB — использует json для сериализации данных. Только стандартная библиотека, я не проверял, но подозреваю, что она медленнее, чем semidbm, из-за накладных расходов на сериализацию.

  • Petite DB — мой собственный простой обходной путь с использованием модуля Python zipfile. Базовое тестирование в книгах, но оно не готово к производству.

Существуют также оболочки Python для LMDB, UnQLite и SQLite4 LSM, все из которых поддерживают Windows, хотя привязки SQLite4 не тестировались.

Два последних написаны Чарльзом Лейфером, который хорошо разбирается в kv-магазинах и активно использует Python. разработчик (см. Peewee).

Что касается LMDB, я пробовал его какое-то время. Никаких претензий, но он использует транзакционную модель, где вы не можете использовать его в стиле словаря, как с другими dbm, если вы не создаете подкласс/составляете/отправляете запрос на извлечение и т. д. Кроме того, он явно не использует сжатие (см. также), что меня интересовало.

Так что LMDB просто не совсем соответствовал моим конкретным потребностям. Кажется, что он очень эффективен, привязки работали нормально, и их установка была без проблем (у меня работал pip, мне не нужно было устанавливать LMDB отдельно или какие-либо неудобства в этом отношении).

person Jay    schedule 15.07.2017

Я думаю, что anydbm в Windows будет загружать только dumpdbm, так как все остальные модули кажутся только Unix. Согласно документации Python...

«Модуль dumpdbm предназначен в качестве крайнего запасного варианта для модуля anydbm, когда нет более надежного модуля. Модуль dumpdbm написан не для скорости и не так интенсивно используется, как другие модули базы данных».

person MarioVilas    schedule 02.08.2011