2009-11-29 4 views
0

Я пытаюсь создать структуру Concurrence для Stackless Python. Он включает в себя драйвер MySQL и при запуске некоторого кода, который ранее работал нормально с MySQLdb, он терпит неудачу.Проблемы с драйвером MySQL с помощью INFORMATION_SCHEMA?

Что я делаю:

  1. Подключение к базе данных MySQL, используя DBAPI с именем пользователя/пароль/порт/базы данных.

  2. Выполнение SELECT * FROM INFORMATION_SCHEMA.COLUMNS

Это терпит неудачу с сообщением:

Table 'mydatabase.columns' doesn't exist 

"MyDatabase" является база данных я указал на шаге 1.

При выполнении этого запроса в MySQL консоль после выпуска «USE 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 таким образом?

Если я хочу отправить конкретную «USE INFORMATION_SCHEMA», прежде чем пытаться ее запросить, я получаю ожидаемый результат. Но я не хочу, чтобы мне приходилось всплескивать мой код с помощью запросов «USE».

ответ

1

я наконец-то нашел причину.

Водитель просто повторил функцию сервера флаги обратно в рукопожатии протокола, за исключением сжатия:

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

client_caps = server_caps 

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

Поскольку сервер имеет возможность ...

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

. .., который был отозван на сервер, сообщая ему не допускать такой синтаксис.

Добавление client_caps &= ~CAPS.NO_SCHEMA сделал трюк.

1

Это определенно похоже на проблему с драйвером. Возможно, драйвер python не поддерживает префикс DB.

Просто, чтобы быть уверенным, попробуйте наоборот: сначала use INFORMATION_SCHEMA, а затем SELECT * FROM mydatabase.sometable

+0

Спасибо, попробовав другой способ, дал ту же ошибку, сказав, что это не имеет никакого отношения к INFORMATION_SCHEMA конкретно. – truppo