Да, это, безусловно, может быть связано с более старыми версиями файла db, но было бы полезно, если бы вы опубликовали код, сгенерировавший это исключение, и полную трассировку.
При отсутствии этого вы уверены, что открываемый файл базы данных имеет правильный тип? Например, попытка открыть файл btree, как будто это хеш, вызывает исключение, которое вы видите:
>>> 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')
Если вам нужно перенести файлы базы данных, обратите внимание на утилиты db_dump
, db_dump185
и db_load
, которые поставляются с дистрибутивом bdb.