خطأ واجهة BDB بيثون عند قراءة BDB
-
20-09-2019 - |
سؤال
bsddb.db.dbinvalidargerrgerror: (22، 'وسيطة غير صالحة - /dbs/supermodels.db: نوع الملف غير متوقع أو تنسيق ")
هل هذا الخطأ نتيجة إصدارات BDB غير متوافقة (1.85 أو 3+)؟ إذا كان الأمر كذلك، كيف يمكنني التحقق من الإصدارات، وإطلاق النار على مشكلة وحل هذا الخطأ؟
المحلول
نعم، هذا بالتأكيد يمكن أن يكون بسبب الإصدارات القديمة من ملف 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، يمكنك عادة تحديد نوع DB باستخدام 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
المرافق التي تأتي مع distribition BDB.