目前我正在嘗試搜索數據庫以獲取某些事件。我的查詢是這樣Psycopg2使用通配符導致TypeError
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
簡單地說,我需要通過查詢日曆事件的數據庫的外觀和與它和本月初之後「測試」的總結返回任何東西。
這將返回從數據庫命令行查詢時的預期結果。然而,當我試圖在我的Python腳本psycopg2使用它作爲這樣的:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
我得到一個錯誤類型
*** TypeError: 'dict' object does not support indexing
做一些初步的谷歌搜索聽起來有點像與我使用的方法我的通配符。我可能是錯的,但我可能錯過了一些我看不到的東西。希望來自社區的新鮮眼睛可以糾正我的不好意思;)
嗯,確實解決這個問題。但是我不相信這是根本問題,因爲我試圖擺脫字典,只是在沒有替換的情況下運行該行,以查看通配符是否確實沒有被正確轉義。擺脫字典的工作,爲什麼我需要在使用字典時逃避通配符? – 2010-10-15 17:55:54
底層參數替換使用'%'作爲特殊字符,意思是'嘿,替代我的字典中的值在這裏'。我的猜測是,如果你沒有通過字典,這個參數化邏輯會被完全忽略掉,所以你沒有機會被where子句中'%'的存在所困惑。換句話說,在參數化步驟中,您可能會窒息,而您不再這樣做。所以,如果你傳遞參數,你需要轉義特殊的%字符,否則不行。 – 2010-10-15 18:02:53
好吧,這是有道理的。謝謝你,先生! – 2010-10-15 18:05:09