2010-12-10 15 views
5

Hallo Ich versuche, eine SQlite-Tabelle basierend auf einer Benutzereingabe mit Platzhaltern zu suchen. Ich habe verschiedene Methoden ausprobiert, weil ich es nicht zur Arbeit bringen kann. Dies ist das letzte, was ich versuchte, es ist eine Lösung, die ich hier tatsächlich gefunden, aber es könnte auf der letzten Zeile 3.Python + sqlite: die LIKE-Abfrage mit Platzhaltern

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

Dies erzeugt es diesen Fehler in Python geändert hat.

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

Ich habe viele verschiedene Dinge ausprobiert und das macht mich verrückt. Ich fange an zu denken, dass das nicht möglich ist, ohne zuerst die ganze Tabelle zu einer Schnur zu lesen.

Antwort

11

Ihr Problem scheint nur zu sein, dass Sie eine Zeichenfolge als zweites Argument an cur.execute geliefert haben, wenn Sie wahrscheinlich ein Tupel mit einem Element mit der Zeichenfolge liefern wollten.

Da eine Zeichenfolge eine Sequenz ist, wird jedes Zeichen in der Zeichenfolge als separater Parameter interpretiert. Daher wird der Fehler "Falsche Anzahl an Bindungen" angezeigt.

Versuchen:

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

Hinweis das Komma in dem Tupel, ('%'+search+'%',). Ohne es ist es kein Tupel, nur eine Zeichenfolge in Klammern.

+0

Ich sehe. Vielen Dank Mann: D –

+0

@steini Wenn diese Antwort für Sie funktioniert hat, akzeptieren Sie sie bitte. – bogeymin