2013-04-26 110 views
5

shelve模块实现在anydbm模块的顶部。该模块充当4个不同的具体DBM实现一个门面,并创建一个新的数据库时,按以下顺序将挑选第一个可用的模块:如何强制python使用dumbdbm模块创建新的数据库?

  • dbhash (不建议使用,但仍是第一anydbm选择)。这是bsddb模块的代理,.open()真是bsddb.hashopen()

  • GDBM,Python模块为GNU DBM库,提供比dbm模块与此相同的库使用时,可以提供更多的功能。

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

  • dumbdbm,一个纯粹的python实现。

但在我的系统,虽然我有dbhash由于某种原因,我想它来创建数据库刚刚与dumbdbm

我该如何做到这一点?

+0

出于兴趣,你为什么要这样做? – 2013-04-26 22:40:36

+0

我试图类似于一个系统。基本系统创建一个使用dumbdbm的db文件,然后将该文件用作另一个程序的输入。如果我使用任何其他数据库,我必须更改其他程序以正确读取新文件,并且尽可能不要更改代码。 – 2013-04-26 22:47:08

+0

只有dumbdbm在Windows上可用。如果你想在Linux和Windows之间移动'shelve'文件,他们必须使用dumbdbm格式。 – 2017-02-07 11:26:33

回答

5

您无法控制使用什么db模块shelve.open,但有解决方法。

最好是通常自己创建db和它手动传递给the Shelf constructor,而不是调用shelve.open

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

第一个参数是,其提供能够存储串的dict样接口的任何对象,这正是任何*dbm对象。

相关问题