2009-11-29 41 views
0

我正在嘗試Stackless Python的Concurrence框架。它包含一個MySQL驅動程序,當運行一些先前在MySQLdb上運行良好的代碼時,它會失敗。有關INFORMATION_SCHEMA的MySQL驅動程序問題?

我在做什麼:

  1. 連接到使用DBAPI使用用戶名/密碼/端口/數據庫MySQL數據庫。

  2. 執行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」查詢來遍佈我的代碼。

回答

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驅動不支持數據庫前綴。

只是可以肯定,圍繞嘗試其他方式:第一use INFORMATION_SCHEMA,然後SELECT * FROM mydatabase.sometable

+0

謝謝,嘗試另一種方式產生了同樣的錯誤,告訴我它與INFORMATION_SCHEMA沒有任何關係。 – truppo 2009-11-29 23:43:01