2010-12-10 119 views
5

嗨 我試圖根據帶通配符的用戶輸入搜索SQlite表。我已經嘗試過不同的方法,但無法使其工作。 這是我想的最後一件事,這是一個解決方案,我發現這裏其實,但它可能會出現在Python 3Python + sqlite:帶通配符的LIKE查詢

search = input("type name or partial name: ") 
    cur.execute("select * from contacts where name like ?", 
       ('%'+search+'%')) 

這將產生上最後一行出現這個錯誤已經改變。

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied. 

我嘗試了很多不同的事情,這讓我瘋狂。如果不先將整個表格讀取到字符串,我開始認爲這是不可能的。

回答

11

你的問題似乎是你提供了一個字符串作爲cur.execute的第二個參數,當你可能打算提供一個包含字符串的單元素元組。

由於字符串是一個序列,字符串中的每個字符將被解釋爲一個單獨的參數,這就是爲什麼你看到「錯誤的綁定次數」錯誤。

嘗試:

cur.execute("select * from contacts where name like ?", ('%'+search+'%',)) 

注意逗號元組,('%'+search+'%',)。沒有它,它不是一個元組,而只是一個括號中的字符串。

+0

我明白了。非常感謝:D – 2010-12-10 14:47:49

+0

@ steini如果這個答案適合你,請「接受」它。 – bogeymin 2010-12-10 14:55:56