我想在我的 Windows 机器上使用 dbm 模块,但它目前仅在 Unix 上受支持。http://docs.python.org/library/dbm.html
有谁知道具有类似语法的类似模块或在 Windows 上获得 dmb 功能的解决方法?能够访问写入硬盘驱动器的数据库就像我编写访问字典的方式一样很棒。感谢您的帮助!
我想在我的 Windows 机器上使用 dbm 模块,但它目前仅在 Unix 上受支持。http://docs.python.org/library/dbm.html
有谁知道具有类似语法的类似模块或在 Windows 上获得 dmb 功能的解决方法?能够访问写入硬盘驱动器的数据库就像我编写访问字典的方式一样很棒。感谢您的帮助!
实际上,经过更多的谷歌搜索,我发现了这个:
http://docs.python.org/library/anydbm.html#module-anydbm
我已经在 Windows 上试过了,它似乎工作正常 =)
根据使用 Python 2.7.2 在 Windows 7 系统上进行的以下测试,Windows 安装似乎支持 dbhash。
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'
我认为 Windows 上的 anydbm 只会加载dumbdbm,因为所有其他模块似乎都只是 Unix。根据 Python 文档...
“当没有更强大的模块可用时,dumbdbm 模块旨在作为 anydbm 模块的最后后备方案。dumbdbm 模块不是为了速度而编写的,并且几乎没有像其他数据库模块那样频繁使用。”
如果 Python 3 是相关的,我会选择外部 kv 解决方案,因为dumbdbm并不快乐。
一些纯 Python 选项:
semidbm -dumbdbm的更快替代方案,仅限 Python 标准库,pip and go. 如果我想确保对用户的可移植性和可用性,我会选择这个。
PickleDB - 使用 json 序列化数据。仅限 Standrad 库,我没有进行基准测试,但我怀疑它比 semidbm 慢,因为序列化开销。
Petite DB - 我自己使用 Python 的 zipfile 模块的简单解决方法。书中的基本测试,但尚未准备好生产。
还有LMDB、UnQLite和SQLite4 LSM的 Python 包装器,所有这些都支持 Windows,尽管 SQLite4 绑定没有经过测试。
后两者由 Charles Leifer 编写,他既精通kv 存储,又是一个狂热的 Python 开发人员(请参阅Peewee)。
至于LMDB,我已经尝试了一段时间。没有抱怨,但它使用事务模型,您不能像使用其他 dbm 那样使用字典样式,除非您子类化/撰写/提交拉取请求等。此外,它明确不使用压缩(另请参阅)这是我感兴趣的事情。
所以 LMDB 只是不太适合我的特定需求。它似乎功能强大,绑定运行良好,安装它们也很容易(pip 对我有用,不需要单独安装 LMDB 或任何麻烦)。