Windows下的Python DBM模块?

10 投票
4 回答
6092 浏览
提问于 2025-04-16 02:19

我想在我的Windows电脑上使用dbm模块,但现在这个模块只支持Unix系统。http://docs.python.org/library/dbm.html

有没有人知道类似的模块,语法也差不多,或者有什么方法可以让dbm在Windows上运行?能够像访问字典一样访问写在硬盘上的数据库,那就太好了。谢谢大家的帮助!

4 个回答

3

如果你在用Python 3,我建议使用外部的键值存储解决方案,因为dumbdbm用起来不太方便。

这里有一些纯Python的选择:

  • semidbm - 这是一个比dumbdbm更快的选择,只需要Python标准库,直接用pip安装就行。如果我想确保能在不同环境中使用,我会选择这个。

  • PickleDB - 这个使用json来保存数据。也是标准库的,我没有做过性能测试,但我觉得它可能比semidbm慢,因为序列化会增加开销。

  • Petite DB - 这是我自己用Python的zipfile模块做的简单解决方案。基本测试还在进行中,但还不适合生产环境。

还有一些Python的封装可以用来访问LMDBUnQLiteSQLite4 LSM,这些都支持Windows,虽然SQLite4的绑定没有经过测试。

后面两个是由Charles Leifer开发的,他对键值存储很有研究,也是一个热爱Python的开发者(可以看看Peewee)。

关于LMDB,我试用过一段时间。没有什么抱怨,但它使用的是事务模型,不能像其他dbm那样用字典的方式来使用,除非你去子类化、组合或者提交请求等。此外,它明确不支持压缩(见这里),这正是我感兴趣的功能。

所以LMDB并不完全符合我的特定需求。它看起来功能很强大,绑定也很好用,安装也很简单(我用pip安装的,没有需要单独安装LMDB或者其他麻烦的事情)。

3

根据在使用Python 2.7.2的Windows 7系统上的测试,似乎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'
5

其实,在我继续搜索后,我发现了这个:

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

我在Windows上试过这个,似乎运行得很好 =)

撰写回答