2009-08-26 6 views
1

bsddb.db.DBInvalidArgError: (22, 'Invalid argument - /dbs/supermodels.db: unerwartetes Dateityp oder das Format')BDB Python-Schnittstelle Fehler beim Lesen BDB

Ist dieser Fehler ein Ergebnis von inkompatiblen BDB Versionen (1.85 oder 3+)? Wenn ja, wie überprüfe ich die Versionen, behebe und löse diesen Fehler?

+0

Es wäre hilfreich, wenn Sie Code hinzufügen könnten, der den Kontext dieses Fehlers zeigt. – Shirkrin

Antwort

1

Ja, dies könnte sicherlich auf ältere Versionen der db-Datei zurückzuführen sein, aber es würde helfen, wenn Sie den Code, der diese Ausnahme und die vollständige Traceback generiert hat, gepostet haben.

In Ermangelung dieser, sind Sie sicher, dass die Datenbankdatei, die Sie öffnen, vom richtigen Typ ist? Um zum Beispiel einer btree Datei zu öffnen versucht, als ob es ein Hash wirft die Ausnahme, die Sie sehen:

>>> import bsddb 
>>> bt = bsddb.btopen('bt') 
>>> bt.close() 
>>> bsddb.hashopen('bt') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
    File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen 
    d.open(file, db.DB_HASH, flags, mode) 
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./bt: unexpected file type or format') 

In * nichts können Sie in der Regel die Art der db bestimmen, indem die file Befehle, z.B.

$ file /etc/aliases.db cert8.db 
/etc/aliases.db: Berkeley DB (Hash, version 8, native byte-order) 
cert8.db:  Berkeley DB 1.85 (Hash, version 2, native byte-order) 

eine 1.85-Version Datei Öffnen nicht mit der gleichen Ausnahme:

>>> db = bsddb.hashopen('/etc/aliases.db') # works, but... 
>>> db = bsddb.hashopen('cert8.db') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
    File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen 
    d.open(file, db.DB_HASH, flags, mode) 
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./cert8.db: unexpected file type or format') 

Wenn Sie die Datenbankdateien migrieren müssen, Sie an den db_dump, db_dump185 und db_load Dienstprogramme aussehen sollten, die mit dem BDB kommen Verbreitung.