读取BDB时的BDB Python接口错误
bsddb.db.DBInvalidArgError: (22, '无效的参数 -- /dbs/supermodels.db: 意外的文件类型或格式')
这个错误是因为BDB版本不兼容造成的吗(1.85或3以上)?如果是的话,我该怎么检查版本,排查问题并解决这个错误呢?
1 个回答
1
是的,这可能是因为你使用的数据库文件版本太旧了。不过,如果你能把产生这个错误的代码和完整的错误追踪信息发出来,那会更有帮助。
如果没有这些信息,你确定你打开的数据库文件是正确类型的吗?比如说,如果你把一个btree类型的文件当成hash类型来打开,就会出现你看到的那个错误:
>>> 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_dump
、db_dump185
和db_load
工具。