Frage

Ich versuche, die Gleichzeitigkeit Rahmen für Stackless Python aus. Es enthält einen MySQL-Treiber und wenn einige Code ausgeführt wird, der zuvor mit MySQLdb fein lief es nicht.

Was ich tue:

  1. Verbinden mit der MySQL-Datenbank mit dbapi mit Benutzername / Passwort / Hafen / Datenbank.

  2. Ausführen SELECT * FROM INFORMATION_SCHEMA.COLUMNS

Dies scheitert mit der Meldung:

Table 'mydatabase.columns' doesn't exist

"mydatabase" ist die Datenbank, die ich in Schritt 1 angegeben.

Wenn die gleiche Abfrage in der Konsole MySQL zu tun, nachdem "USE mydatabase" Ausgabe, es funktioniert perfekt.

Überprüfen der Netzwerkkommunikation Ausbeuten etwas wie folgt aus:

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

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

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

Ist das ein Treiber-Problem (da es in MySQLdb funktioniert)? Oder bin ich nicht in der Lage sein soll INFORMATION_SCHEMA auf diese Weise abfragen?

Wenn ich einen bestimmten „USE INFORMATION_SCHEMA“ senden, bevor Sie versuchen, es zu fragen, erhalte ich das erwartete Ergebnis. Aber ich will nicht zu haben, meinen Code über und über mit „USE“ Abfragen streuen.

War es hilfreich?

Lösung 2

Schließlich fand ich den Grund.

Der Fahrer hallte nur die Server-Funktion Flags zurück in dem Protokoll Handshake, mit Ausnahme der Kompression:

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

client_caps = server_caps 

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

Da der Server die Fähigkeit hat, ...

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

... das war wieder auf den Server wider, es nicht zu sagen, dass die Syntax zu ermöglichen.

Hinzufügen client_caps &= ~CAPS.NO_SCHEMA den Trick hat.

Andere Tipps

Es sieht definitiv wie ein Treiber-Problem. Vielleicht Fahrer die Python nicht die DB-Präfix unterstützen.

Nur um sicherzugehen, versuchen, die umgekehrt: zuerst use INFORMATION_SCHEMA und dann SELECT * FROM mydatabase.sometable

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top