Pregunta

Estoy probando el marco de Concurrencia para Python apilable. Incluye un controlador MySQL y cuando ejecuta un código que anteriormente funcionaba bien con MySQLdb, falla.

Lo que estoy haciendo:

  1. Conexión a la base de datos MySQL usando dbapi con nombre de usuario / contraseña / puerto / base de datos.

  2. Ejecutando SELECT * FROM INFORMATION_SCHEMA.COLUMNS

Esto falla con el mensaje:

Table 'mydatabase.columns' doesn't exist

" mydatabase " es la base de datos que especifiqué en el paso 1.

Al hacer la misma consulta en la consola MySQL después de emitir " USE mydatabase " ;, funciona perfectamente.

Verificar la comunicación de red produce algo como esto:

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

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

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

¿Es este un problema de controlador (ya que funciona en MySQLdb)? ¿O se supone que no puedo consultar INFORMATION_SCHEMA de esta manera?

Si envío un " USE INFORMATION_SCHEMA " específico antes de intentar consultarlo, obtengo el resultado esperado. Pero, no quiero tener que rociar mi código con '' USE '' consultas.

¿Fue útil?

Solución 2

Finalmente encontré la razón.

El controlador acaba de repetir las marcas de capacidad del servidor en el protocolo de enlace, con la excepción de la compresión:

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

client_caps = server_caps 

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

Como el servidor tiene la capacidad ...

CLIENT_NO_SCHEMA 16 / * No permitir database.table.column * /

... que se hizo eco en el servidor, diciéndole que no permita esa sintaxis.

Agregar client_caps & amp; = ~ CAPS.NO_SCHEMA hizo el truco.

Otros consejos

Definitivamente parece un problema de controlador. Tal vez el controlador de Python no sea compatible con el prefijo DB.

Solo para estar seguro, pruebe al revés: primero use INFORMATION_SCHEMA y luego SELECT * FROM mydatabase.sometable

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top