Verarbeitung von „WHERE _ IN ___“-Anweisungen in SQLite
Bei Verwendung eines WHERE IN -Anweisung in SQLite ist es wichtig, die korrekte Konstruktion der Anweisung sicherzustellen, um Fehler zu vermeiden. Das Problem tritt auf, wenn die Anzahl der bereitgestellten Bindungen nicht mit der erwarteten Anzahl übereinstimmt, was zu einem ProgrammingError führt.
Um dieses Problem zu beheben, müssen Sie Ihre Anweisung so ändern, dass sie die richtige Anzahl von Fragezeichen (?) enthält Parameter. Zum Beispiel:
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars)))
Hier generieren wir mit join([?]*len(list_of_vars))_ eine durch Kommas getrennte Zeichenfolge aus Fragezeichen, die eine ordnungsgemäße Bindung der Parameterwerte ermöglicht. Wenn beispielsweise _list_of_vars ['foo', 'bar'] enthält, lautet die Anweisung wie folgt:
"SELECT * FROM tab WHERE obj IN (?, ?)"
Jetzt können Sie diese Anweisung ausführen, indem Sie list_of_vars als übergeben Parameterwerte:
c.execute(statement, list_of_vars)
Obwohl alternative Methoden existieren können, wird die Verwendung von Bindeparametern empfohlen, um SQL-Injection-Angriffe zu verhindern. Bei umfangreichen Listen kann die Verwendung einer temporären Tabelle für Werte und deren Verknüpfung mit dieser die Effizienz steigern.
Das obige ist der detaillierte Inhalt vonWie behandelt man „WHERE IN'-Anweisungen mit Bind-Parametern in SQLite richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!