2

によって作成されたデータベースファイルを読み込もうとしていますreprepro。私は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_dumpは次のことを示しています。

VERSION=3
format=bytevalue
database=local-lenny|main|sparc
type=btree
db_pagesize=4096
HEADER=END
 <loads of data>

ファイル自体は次のように識別されます:/var/packages/db/packages.db: Berkeley DB (Btree, version 9, native byte-order)by file

そのコンテンツにアクセスするにはどうすればよいですか?正しく理解していれば、実際のデータベースの名前だけを取得しましたkeys()。これらのデータベースのコンテンツに今すぐアクセスするにはどうすればよいですか?

4

1 に答える 1

2

そして答えは、bsddbインターフェイスの「素敵な」バージョンが1つのファイル内のマルチ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)
于 2010-12-30T15:40:45.877 に答える