Проблемы с драйвером MySQL для INFORMATION_SCHEMA?

0

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

Что я делаю:

  • Подключение к базе данных MySQL с помощью dbapi с именем пользователя/паролем/портом/базой данных.

  • Выполнение 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".

Теги:
python-db-api
python-stackless

2 ответа

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню