Ошибка интерфейса Python BDB при чтении BDB - PullRequest
1 голос
/ 26 августа 2009

bsddb.db.DBInvalidArgError: (22, «Недопустимый аргумент - /dbs/supermodels.db: неожиданный тип или формат файла»)

Является ли эта ошибка результатом несовместимых версий BDB (1.85 или 3+)? Если да, то как проверить версии, устранить неполадки и устранить эту ошибку?

1 Ответ

1 голос
/ 27 августа 2009

Да, это, безусловно, может быть связано с более старыми версиями файла 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.

...