2010-06-23 20 views
27

ich versucht ist ein SQLite-LIKE-Abfrage mit Python-Bibliothek parametrisiert zu verwenden, wie unten:Python SQLite Parameter Substitution mit Wildcards in LIKE

self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type)) 

aber das? innerhalb des Wildcard wird mich nicht ausgewertet werde mit diesem Fehler zu verlassen:

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

Ich habe auch versucht, mit der markierten Version der Abfrage zu verwenden:

like '%:searchstr%' und in der Liste mit {"searchstr":searchstr...

aber wenn Ich mache, dass die Abfrage ausgeführt wird, aber nie Ergebnisse zurückgibt, obwohl manuell "like '%a%'"... zurückgeben Hunderte von Ergebnissen, wie es sollte

Vorschläge bitte?

Antwort

53

Die Zitate schützen entweder ? oder :name davor, als Platzhalter genommen zu werden - sie werden wörtlich genommen. Sie müssen die Prozentzeichen um die übergebene Zeichenfolge platzieren und den einfachen Platzhalter ohne Anführungszeichen verwenden. D.h .:

self.cursor.execute(
    "select string from stringtable where string like ? and type = ?", 
    ('%'+searchstr+'%', type)) 

Beachten Sie, dass weder ? in Anführungszeichen ist - und das ist genau so, wie es für sie als Platzhalter genommen werden sollte.

+0

vielen dank! das hat es behoben! – atcuno

+0

@huntler, immer froh zu helfen! –

+0

Hat Python ein PHP-ähnliches Parsing von Variablen in doppelten Anführungszeichen? z.B. '" $ var "' in PHP würde den Wert von $ var in Anführungszeichen zerlegen. –

Verwandte Themen