2009-08-26 43 views
1

bsddb.db.DBInvalidArgError BDB Python的接口錯誤版本(1.85或3+)?如果是這樣,我該如何檢查版本,解決這個錯誤?當讀BDB

+0

如果您可以添加一些代碼來顯示此錯誤的上下文,將會有所幫助。 – Shirkrin 2009-08-26 21:09:32

回答

1

是的,這當然可能是由於舊版本的db文件,但如果您發佈生成此異常的代碼和完整的回溯,它將會有所幫助。

如果沒有這個,你確定你打開的數據庫文件是正確的類型嗎?例如,試圖打開一個文件,B樹,如果它是一個哈希提高,你所看到的異常:

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

在* nix中,你通常可以通過使用file命令,例如確定數據庫的類型

$ 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) 

打開一個1.85版本的文件失敗,出現相同的異常:

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

如果您需要遷移的數據庫文件,你應該看看附帶BDB的db_dumpdb_dump185db_load公用事業distribuition。