2009-03-04 27 views
1

使用pysqlite如何將用戶定義類型用作比較中的值, g:「... WHERE columnName> userType」?select語句中的pysqlite用戶類型

例如,我用必要的註冊,轉換器等定義了一個bool類型.Pysqlite/Sqlite按照預期對INSERT和SELECT操作(bool'True'存儲爲整數1並返回True)做出響應。

但是,如果在「SELECT * from tasks WHERE display = True」或「... WHERE display ='True」中使用bool,則失敗。 「在第一種情況下,Sqlite報告一個錯誤,即沒有名爲True的列。而在第二種情況下,沒有記錄被返回。如果使用1代替True,選擇將起作用。使用pysqlite自己的日期和時間戳適配器時,我似乎遇到同樣的問題。

我可以解決此行爲和其他用戶類型的問題,但這並不是那麼有趣。我想知道是否在查詢中使用用戶定義的類型是不可能的,這樣我就不會在這個特定的牆上猛撞我的頭。

謝謝。

回答

0

您可能必須將其轉換爲正確的類型。試試「SELECT * FROM tasks WHERE(display = CAST('True'AS bool))」。

+0

謝謝,我會試試這個 – Strider1066 2009-03-05 01:17:32

1

使用正確的方式將變量傳遞給查詢:不要構建查詢,請使用問號並將參數作爲元組傳遞到​​。

myvar = True 
cur.execute('SELECT * FROM tasks WHERE display = ?', (myvar,)) 

這樣sqlite驅動程序將直接使用該值。不再需要轉義,引用,轉換。

對每個參數甚至字符串,整數等都使用這種技術。這樣就可以自動避免SQL注入。

+0

謝謝,我會試試這個 – Strider1066 2009-03-05 01:18:08