質問

Stackless PythonのConcurrenceフレームワークを試しています。 MySQLドライバーが含まれており、以前にMySQLdbで正常に実行されていたコードを実行すると、失敗します。

私がしていること:

  1. ユーザー名/パスワード/ポート/データベースでdbapiを使用してMySQLデータベースに接続します。

  2. SELECT * FROM INFORMATION_SCHEMA.COLUMNS

  3. の実行

これはメッセージで失敗します:

Table 'mydatabase.columns' doesn't exist

" mydatabase"は、ステップ1で指定したデータベースです。

「USE mydatabase」を発行した後にMySQLコンソールで同じクエリを実行すると、完全に機能します。

ネットワーク通信を確認すると、次のような結果が得られます。

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

やっと理由がわかりました。

ドライバーは、圧縮を除き、プロトコルハンドシェイクでサーバー機能フラグをエコーバックしました。

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

client_caps = server_caps 

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

サーバーに機能があるため...

CLIENT_NO_SCHEMA 16 / * database.table.columnを許可しない* /

...サーバーにエコーバックされ、その構文を許可しないように指示されました。

client_caps&amp; =〜CAPS.NO_SCHEMA を追加するとうまくいきました。

他のヒント

間違いなくドライバーの問題のように見えます。たぶん、PythonドライバーはDBプレフィックスをサポートしていません。

確かに、他の方法を試してください:最初に INFORMATION_SCHEMA を使用し、次に SELECT * FROM mydatabase.sometable

を使用します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top