كيف يمكنني تحديد السليم `paramstyle` عندما يكون كل ما لدي كائن" اتصال "؟

StackOverflow https://stackoverflow.com/questions/1471304

  •  16-09-2019
  •  | 
  •  

سؤال

لدي مثيل ل Connection (مطلوب ل DB API 2.0 المتوافقة)، ولكن ليس لدي الوحدة التي تم استيراد منها. المشكلة هي أنني أحاول استخدام المعلمات المسماة، لكنني لا أعرف أي paramstyle ليستخدم.

حيث paramstyle هو ثابت على مستوى الوحدة، لا أستطيع أن أسأل فقط Connection. وبعد حاولت استخدام inspect.getmodule() في بلدي Connection مثيل، لكنه عاد للتو None. وبعد هل هناك طريقة أسهل في عداد المفقودين، أو سأحتاج إلى القيام بذلك try/except رمز لتحديد أي paramstyle ليستخدم؟

هل كانت مفيدة؟

المحلول

يمر type(connection) (فئة الاتصال) ل inspect.getmodule(), ، وليس كائن اتصال. المسارات الفئة الوحدة التي تم تعريفها inspect يمكن العثور عليه، في حين لا يتم تعقب إنشاء الكائنات.

نصائح أخرى

من أين حصلت على مثيل؟ لا أستطيع أن أتخيل موقفا لن تعرف فيه مصدر الاتصال مسبقا. إذا كان مستخدم مكتبتك يمر لك اتصالا، اسأله عن paramstyle كذلك.

على أي حال، انظر إلى جلسة وحدة التحكم التالية:

>>> import sqlite3
>>> c = sqlite3.connect('/tmp/test.db')
>>> c
<sqlite3.Connection object at 0xb7db2320>
>>> type(c)
<type 'sqlite3.Connection'>
>>> type(c).__module__
'sqlite3'
>>> import sys
>>> sys.modules[type(c).__module__].paramstyle
'qmark'

ومع ذلك تمتص ذلك. لن أعتمد عليه ولا حتى لثانية واحدة. يمكنني استخدام كائناتي تشبه الاتصال الخاصة بي، وأرغب في اجتياز أحد تلك الموجودة في مكتبتك. كنت أكره ذلك عندما يحاول معرفة السحرية بطريقة سحرية وفشلها لأنني أستخدم كائن مجمع يشبه الاتصال.

لا يمكنك.

يمكنك أن تجرب من خلال النظر في connection.__class__.__module__, ، لكن الأمر غير محدد بواسطة DB-API الذي سيعمله. في الواقع للعديد من الحالات المشتركة لن. (على سبيل المثال. يتم تعريف الفصل في مجموعة من الحزمة التي تعمل ككائن وحدة DB-API؛ أو الفصل هو ملحق C مع عدم وجود __module__.)

من المؤسف، ولكن سيتعين عليك تمرير مرجع إلى كائن الوحدة النمطية DB-API حول كائن اتصال DB-API.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top