shelve
模块在anydbm
模块的顶部实现。此模块充当4种不同特定DBM实现的外观,它将按以下顺序选择创建新数据库时可用的第一个模块:
dbhash
(已弃用但仍是第一个anydbm
选项)。这是bsddb
模块的代理,.open()
确实是bsddb.hashopen()
gdbm ,GNU DBM库的Python模块,提供比dbm
模块在与同一个库一起使用时提供的更多功能。
dbm ,一个代理模块,使用ndbm
,BSD DB和GNU DBM库(在编译Python时选择)。
dumbdbm ,一个纯python实现。
但是在我的系统中,虽然由于某种原因我有dbhash
,我希望它只使用dumbdbm
创建数据库。
我怎样才能做到这一点?
答案 0 :(得分:5)
您无法控制数据库模块shelve.open
使用的内容,但有一些解决方法。
最好通常是自己创建数据库并手动将其传递给the Shelf
constructor,而不是调用shelve.open
:
db = dumbdbm.open('mydb')
shelf = shelve.Shelf(db)
第一个参数是提供dict
类似接口的任何对象,它可以存储字符串,这正是任何*dbm
对象所在。