Pergunta

Eu estou tentando o quadro Concurrence para Stackless Python. Ele inclui um driver MySQL e ao executar um código que anteriormente funcionou muito bem com MySQLdb ele falhar.

O que eu estou fazendo:

  1. Como conectar ao banco de dados MySQL usando dbapi com nome de usuário / senha / port / banco de dados.

  2. A execução SELECT * FROM INFORMATION_SCHEMA.COLUMNS

Esta falha com mensagem:

Table 'mydatabase.columns' doesn't exist

"mydatabase" é o banco de dados I especificado na etapa 1.

Ao fazer a mesma consulta no console MySQL após a emissão "mydatabase USE", ele funciona perfeitamente.

Verificar a comunicação de rede produz algo como isto:

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

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

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

É este um problema de driver (uma vez que funciona em MySQLdb)? Ou que não estou suposto ser capaz de consulta INFORMATION_SCHEMA desta maneira?

Se eu enviar um específico "USE INFORMATION_SCHEMA" antes de tentar consultá-lo, eu recebo o resultado esperado. Mas, eu não quero ter que regar meu código todo com consultas "utilização".

Foi útil?

Solução 2

Eu finalmente encontrei a razão.

O condutor apenas ecoou a capacidade do servidor bandeiras trás no aperto de mão protocolo, com a exceção de compressão:

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

client_caps = server_caps 

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

Como o servidor tem a capacidade ...

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

... que foi ecoado de volta ao servidor, dizendo-lhe para não permitir que a sintaxe.

Adicionando client_caps &= ~CAPS.NO_SCHEMA fez o truque.

Outras dicas

Ele definitivamente parece um problema de driver. Talvez o motorista python não suportam o prefixo DB.

Só para ter certeza, tente o contrário: primeiro use INFORMATION_SCHEMA e depois SELECT * FROM mydatabase.sometable

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top