Проблемы с драйвером MySQL для INFORMATION_SCHEMA? - PullRequest
0 голосов
/ 29 ноября 2009

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

Что я делаю:

  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».

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Я наконец нашел причину.

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

## 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 голос
/ 29 ноября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...