读取BDB时出现BDB Python接口错误

时间:2009-08-26 18:24:44

标签: python berkeley-db

bsddb.db.DBInvalidArgError:(22,'无效参数 - /dbs/supermodels.db:意外文件类型或格式')

此错误是由不兼容的BDB版本(1.85或3+)造成的吗?如果是这样,我如何检查版本,故障排除并解决此错误?

1 个答案:

答案 0 :(得分:1)

是的,这当然可能是由于旧版本的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')

如果您需要迁移数据库文件,则应查看bdb分发附带的db_dumpdb_dump185db_load实用程序。