Python bsddb和reprepro(伯克利)数据库

Python bsddb和reprepro(伯克利)数据库,python,database,berkeley-db,b-tree,bsddb,Python,Database,Berkeley Db,B Tree,Bsddb,我正在尝试读取由repreprepro创建的数据库文件。我对bdb没有太多的经验,所以我在这里可能会感到困惑,但看起来数据库是以某种方式分层的 如果我简单地执行btopen('path/to/packages.db','r'),我会得到包含以下内容的数据库对象: In [4]: packages.items() Out[4]: [('local-lenny|main|amd64', '\x00\x00\x00\x04'), ('local-lenny|main|i386', '\x00\x0

我正在尝试读取由
repreprepro
创建的数据库文件。我对bdb没有太多的经验,所以我在这里可能会感到困惑,但看起来数据库是以某种方式分层的

如果我简单地执行
btopen('path/to/packages.db','r')
,我会得到包含以下内容的数据库对象:

In [4]: packages.items()
Out[4]: 
[('local-lenny|main|amd64', '\x00\x00\x00\x04'),
 ('local-lenny|main|i386', '\x00\x00\x00\x02'),
 ('local-lenny|main|powerpc', '\x00\x00\x00\x14'),
 ('local-lenny|main|source', '\x00\x00\x00\x06'),
 ('local-lenny|main|sparc', '\x00\x00\x00\x12')]
但是,db4.6_转储显示:

VERSION=3
format=bytevalue
database=local-lenny|main|sparc
type=btree
db_pagesize=4096
HEADER=END
 <loads of data>
VERSION=3
格式=字节值
数据库=本地lenny | main | sparc
类型=btree
db_pagesize=4096
标题=结束
文件本身被标识为:
/var/packages/db/packages.db:Berkeley db(Btree,版本9,本机字节顺序)
by
file


我怎样才能找到这些内容?如果我理解正确,我在
keys()
中只得到了实际数据库的名称。现在我如何获取这些数据库的内容?

答案似乎是
bsddb
接口的“好”版本不支持一个文件中的多个btree表。您可以使用以下命令通过bsddb.db显式打开此类表:

env = db.DBEnv()
env.open(None, db.DB_CREATE | db.DB_INIT_MPOOL)
internal_db = db.DB(env)
internal_db.open("the filename", "the internal db name", db.DB_BTREE, db.DB_RDONLY)