2016-12-19 3 views
0

ich derzeit eine SQLite-Anweisung haben, die im DebuggerPython - sqlite Ausnahme "Fehler in der Nähe von s" - Ist meine sqlite-Anweisung falsch?

'SELECT id FROM ITable where question=\\'Is your child\\'s serial correct?\\'' 

Dies ist der Code wie folgt aussieht

def TestStatement(question,patient_id,student_id): 
    try: 
     str = "SELECT id FROM ITable where question='%s' " %(question) 
     r = executeSelect(str) #<<--------Exception occurs here 
    except Exception as e: 
     return "Exception Occured" 
    return r 

Die Frage Parameter:

'Is your child\\'s serial correct?' 

Die zurückgegebene Ausnahme ist:

near "s": syntax error 

Ich kann den Frageparameter nicht ändern. Irgendwelche Vorschläge, was ich falsch machen könnte? oder warum diese SQL-Anweisung falsch ist?

+0

Wenn Sie extra '\' vor '\ '' benötigen dann verwenden Sie '\\\'' – furas

Antwort

1

Das Problem ist - Sie String-Formatierung verwenden, um Ihre Abfrage zu erstellen - das ist nicht nur gefährlich (siehe SQL injections), sondern führt auch zu Problemen mit Python-Datenbank-Typkonvertierungen und Anführungszeichen (das ist genau das, was Sie haben in diesem Fall).

Stattdessen lassen Sie die Anführungszeichen und verwenden eine parametrisierte Abfrage:

query = "SELECT id FROM ITable where question = ?" 
cursor.execute(query, (question,)) 

Hinweis: Sie würde wahrscheinlich Ihre executeSelect() Funktion anpassen müssen Parameter in separaten Argument akzeptieren (s).

+0

Ich sehe immer noch nicht, warum Zitate hier ein Problem haben. Liegt es am Wort "Kind"? – Murphy316

+0

@ Murphy316 Ja, genau, als Ergebnis haben Sie * unausgeglichene Anführungszeichen * und eine syntaktisch falsche Abfrage. Tut mir leid, dass ich das nicht explizit gesagt habe. Vielen Dank. – alecxe

+0

Ich bekomme den Fehler "nicht alle Argumente während der Formatierung von Strings konvertiert" – Murphy316

Verwandte Themen