Windows下的Python DBM模块?
我想在我的Windows电脑上使用dbm模块,但现在这个模块只支持Unix系统。http://docs.python.org/library/dbm.html
有没有人知道类似的模块,语法也差不多,或者有什么方法可以让dbm在Windows上运行?能够像访问字典一样访问写在硬盘上的数据库,那就太好了。谢谢大家的帮助!
4 个回答
如果你在用Python 3,我建议使用外部的键值存储解决方案,因为dumbdbm用起来不太方便。
这里有一些纯Python的选择:
semidbm - 这是一个比dumbdbm更快的选择,只需要Python标准库,直接用pip安装就行。如果我想确保能在不同环境中使用,我会选择这个。
PickleDB - 这个使用json来保存数据。也是标准库的,我没有做过性能测试,但我觉得它可能比semidbm慢,因为序列化会增加开销。
Petite DB - 这是我自己用Python的zipfile模块做的简单解决方案。基本测试还在进行中,但还不适合生产环境。
还有一些Python的封装可以用来访问LMDB、UnQLite和SQLite4 LSM,这些都支持Windows,虽然SQLite4的绑定没有经过测试。
后面两个是由Charles Leifer开发的,他对键值存储很有研究,也是一个热爱Python的开发者(可以看看Peewee)。
关于LMDB,我试用过一段时间。没有什么抱怨,但它使用的是事务模型,不能像其他dbm那样用字典的方式来使用,除非你去子类化、组合或者提交请求等。此外,它明确不支持压缩(见这里),这正是我感兴趣的功能。
所以LMDB并不完全符合我的特定需求。它看起来功能很强大,绑定也很好用,安装也很简单(我用pip安装的,没有需要单独安装LMDB或者其他麻烦的事情)。
根据在使用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'
其实,在我继续搜索后,我发现了这个:
http://docs.python.org/library/anydbm.html#module-anydbm
我在Windows上试过这个,似乎运行得很好 =)