题
bsddb.db.DBInvalidArgError:(22, '无效的参数 - /dbs/supermodels.db:意想不到文件类型或格式')
这是错误(1.85或3+)不相容BDB的版本的结果?如果是这样,我怎么查版本,故障诊断和解决这个问题?
解决方案
是的,这当然可能是由于旧版本的数据库文件,但如果您发布生成此异常并全面追踪代码,这将有助于。
在没有这一点,你确定你正在打开数据库文件是正确的类型?例如,试图打开一个文件,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
命令,e.g通常确定分贝的类型。
$ 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 distribuition的db_dump
,db_dump185
和db_load
工具。
不隶属于 StackOverflow