سؤال

أنا أحاول من موافقة إطار Stackless بيثون.ويشمل الخلية السائق و عند تشغيل بعض التعليمات البرمجية التي سبق ركض بشكل جيد مع MySQLdb أنه فشل.

ما أقوم به:

  1. ربط قاعدة بيانات MySQL باستخدام dbapi مع اسم المستخدم/كلمة المرور/ميناء/قاعدة البيانات الخاصة بنا.

  2. تنفيذ SELECT * FROM INFORMATION_SCHEMA.COLUMNS

هذا فشل مع رسالة:

Table 'mydatabase.columns' doesn't exist

"mydatabase" هو قاعدة بيانات قمت بتحديده في الخطوة 1.

عندما تفعل نفس الاستعلام في الخلية وحدة بعد إصدار "استخدام mydatabase" ، وأنها تعمل تماما.

التحقق من اتصال الشبكة ينتج شيئا مثل هذا:

>>>myusername
>>>scrambled password
>>>mydatabase

>>>CMD 3 SET AUTOCOMMIT = 0
<<<0

>>>CMD 3 SELECT * FROM INFORMATION_SCHEMA.COLUMNS
<<<255
<<<Table 'mydatabase.columns' doesn't exist

هل هذه مشكلة في برنامج تشغيل (لأنه يعمل في MySQLdb)?أو أنا ليس من المفترض أن تكون قادرة على الاستعلام INFORMATION_SCHEMA هذا الطريق ؟

إذا كنت ترسل محددة "استخدام INFORMATION_SCHEMA" قبل محاولة الاستعلام ، أحصل على النتيجة المتوقعة.ولكن أنا لا أريد أن يرش قانون بلدي في جميع أنحاء مع "استخدام" الاستعلامات.

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

المحلول 2

وأخيرا وجدت السبب.

السائق فقط ردد الخادم القدرة أعلام مرة أخرى في بروتوكول المصافحة ، مع استثناء من الضغط:

## concurrence/database/mysql/client.py ##

client_caps = server_caps 

#always turn off compression
client_caps &= ~CAPS.COMPRESS

كما server لديه القدرة على...

CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */

...هذا وقد ردد مرة أخرى إلى الخادم ، تقول أنها لا تسمح أن الجملة.

إضافة client_caps &= ~CAPS.NO_SCHEMA لم خدعة.

نصائح أخرى

يبدو بالتأكيد مثل سائق المسألة.ربما الثعبان السائق لا تدعم DB البادئة.

فقط للتأكد, حاول بطريقة أخرى:أولا use INFORMATION_SCHEMA ثم SELECT * FROM mydatabase.sometable

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