5

shelve模块是在模块之上实现的anydbm。该模块充当 4 种不同特定 DBM 实现的外观,它会在创建新数据库时选择第一个可用的模块,顺序如下:

  • dbhash (已弃用但仍是anydbm首选)。这是bsddb模块的代理,.open()真的bsddb.hashopen()

  • gdbm,用于 GNU DBM 库的 Python 模块,提供的功能比dbm与同一个库一起使用时模块所能提供的功能更多。

  • dbm,一个使用ndbmBSD DB 和 GNU DBM 库(在编译 Python 时选择)的代理模块。

  • dumbdbm,一个纯 python 实现。

但是在我的系统中,尽管dbhash出于某种原因我希望它只使用dumbdbm.

我怎样才能做到这一点?

4

1 回答 1

6

您无法控制 db 模块shelve.open使用什么,但有一些变通方法。

最好的方法通常是自己创建数据库并将其手动传递给构造函数,而不是Shelf调用shelve.open

db = dumbdbm.open('mydb')
shelf = shelve.Shelf(db)

第一个参数是任何提供了dict可以存储字符串的类似接口的对象,这正是任何*dbm对象的本质。

于 2013-04-26T22:47:06.433 回答