Windows下的Python DBM模块?

10
我想在我的 Windows 机器上使用 dbm 模块,但目前它只支持 Unix。有没有类似语法的类似模块或解决方案可以使 dmb 在 Windows 上运行?能够像访问字典一样访问写入硬盘的数据库将是很不错的。谢谢你的帮助!http://docs.python.org/library/dbm.html

你在Windows上使用CPython吗? - Laurion Burchall
GNUdbm和ndbm似乎不支持Windows:https://stackoverflow.com/questions/64909747/is-dbm-gnu-not-supported-on-python-3-7-windows - Basj
4个回答

5

1
如果你在Windows上使用Python 2进行基准测试,当你转换到Python 3时,你会有一个惊喜,因为dbm会回退到dumbdbm,这是Python自己宣称的弱鸡dbm实现,而在Python 2上,它支持更快的Berkeley DB。为了避免在Py3/Win上使用dumbdbm,我使用了LMDBsemidbm,最终编写了自己的解决方案,Petite - Jay
https://docs.python.org/3/library/anydbm.html:404找不到。他们删除了吗?如何在Windows上使用GNU DBM? - Basj
试试这个:https://docs.python.org/3/library/dbm.html - yoonghm
"anydbm模块在Python 3中已更名为dbm。" - facehugger

3

根据在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'

1
此答案已过时。dbhash在Python 3中已被移除。 - benrg

3

如果涉及到Python 3,我会选择外部k-v解决方案,因为dumbdbm并不好用。

一些纯Python选项:

  • semidbm - 比dumbdbm更快的替代品,仅使用Python标准库,可用pip和go安装。如果我想确保可移植性和对用户的可用性,我会选择这个。

  • PickleDB - 使用json序列化数据。仅使用标准库,我没有进行基准测试,但由于序列化开销,我怀疑它比semidbm慢。

  • Petite DB - 我自己使用Python的zipfile模块的简单解决方案。在书籍中进行过基本测试,但尚未达到生产级别。

还有Python包装器可以使用LMDB, UnQLiteSQLite4 LSM, 这些都支持Windows,尽管SQLite4绑定未经过测试。

后两个由Charles Leifer创建,他既精通k-v存储,也是一位狂热的Python开发人员(请参见Peewee)。

就LMDB而言,我试用了一段时间。没有任何抱怨,但它使用事务模型,你不能像其他dbm一样使用它的字典风格,除非你继承/组合/提交拉取请求等。 此外,它明确地不使用压缩(参见also),这是我感兴趣的东西。 因此,LMDB并不完全符合我的特定需求。它似乎非常有能力,绑定工作正常,并且安装它们也很容易(pip对我起作用,没有必要单独安装LMDB或任何麻烦的影响)。

2

我认为在Windows上,任何dbm只会加载dumbdbm,因为所有其他模块似乎都是Unix专用的。根据Python文档...

“当没有更强大的模块可用时,dumbdbm模块旨在作为anydbm模块的最后一道防线。 dumbdbm模块不是为了速度而编写的,并且没有其他数据库模块使用得那么频繁。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接