我想在我的 Windows 机器上使用 dbm 模块,但目前它只支持 Unix。有没有类似语法的类似模块或解决方案可以使 dmb 在 Windows 上运行?能够像访问字典一样访问写入硬盘的数据库将是很不错的。谢谢你的帮助!http://docs.python.org/library/dbm.html
实际上,经过更多的搜索,我找到了这个:
http://docs.python.org/library/anydbm.html#module-anydbm
我在Windows上尝试了一下,似乎工作得很好 =)
根据在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'
dbhash
在Python 3中已被移除。 - benrg如果涉及到Python 3,我会选择外部k-v解决方案,因为dumbdbm并不好用。
一些纯Python选项:
semidbm - 比dumbdbm更快的替代品,仅使用Python标准库,可用pip和go安装。如果我想确保可移植性和对用户的可用性,我会选择这个。
PickleDB - 使用json序列化数据。仅使用标准库,我没有进行基准测试,但由于序列化开销,我怀疑它比semidbm慢。
Petite DB - 我自己使用Python的zipfile模块的简单解决方案。在书籍中进行过基本测试,但尚未达到生产级别。
还有Python包装器可以使用LMDB, UnQLite和SQLite4 LSM, 这些都支持Windows,尽管SQLite4绑定未经过测试。
后两个由Charles Leifer创建,他既精通k-v存储,也是一位狂热的Python开发人员(请参见Peewee)。
就LMDB而言,我试用了一段时间。没有任何抱怨,但它使用事务模型,你不能像其他dbm一样使用它的字典风格,除非你继承/组合/提交拉取请求等。 此外,它明确地不使用压缩(参见also),这是我感兴趣的东西。 因此,LMDB并不完全符合我的特定需求。它似乎非常有能力,绑定工作正常,并且安装它们也很容易(pip对我起作用,没有必要单独安装LMDB或任何麻烦的影响)。我认为在Windows上,任何dbm只会加载dumbdbm,因为所有其他模块似乎都是Unix专用的。根据Python文档...
“当没有更强大的模块可用时,dumbdbm模块旨在作为anydbm模块的最后一道防线。 dumbdbm模块不是为了速度而编写的,并且没有其他数据库模块使用得那么频繁。”