Frage

Ich versuche die Datenbankdateien zu lesen, die von erstellt wurden, reprepro. Ich habe nicht so viel Erfahrung mit BDB, also könnte ich hier verwirrt sein, aber es sieht so aus, als ob die Datenbank in irgendeiner Weise geschichtet ist.

Wenn ich es einfach tue btopen('path/to/packages.db', 'r'), Ich erhalte das Datenbankobjekt mit Inhalten wie:

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')]

Der db4.6_dump zeigt jedoch:

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

Die Datei selbst wird identifiziert als: /var/packages/db/packages.db: Berkeley DB (Btree, version 9, native byte-order) durch file.

Wie komme ich zu diesem Inhalt? Wenn ich es richtig verstehe, habe ich nur die Namen der tatsächlichen Datenbanken in bekommen keys(). Wie komme ich jetzt zum Inhalt dieser DBS?

War es hilfreich?

Lösung

Und die Antwort scheint zu sein, dass die "schöne" Version der bsddb Die Schnittstelle unterstützt Multi -BTree -Tabellen in einer Datei nicht. Sie können diese Tabelle explizit über bsddb.db öffnen, indem Sie:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top