nicht Verwenden Sie die Zeichenfolgenformatierung, um SQL-Werte zu interpolieren. Verwenden Sie SQL-Parameter:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Hier der %s
sind SQL-Parameter; die Datenbank kümmert sich dann für Sie darum, die Werte zu maskieren (die als 2. Argument an `cursor.execute übergeben werden).
Welche Syntax Sie genau verwenden müssen, hängt von Ihrem Datenbankadapter ab; einige verwenden %s
, andere verwenden ?
für die Platzhalter.
Sie können für diese Parameter ansonsten keine Python-Container wie eine Liste verwenden. Sie müssten das zuerst in ein Zeichenfolgenformat serialisieren; Sie könnten dafür JSON verwenden, aber dann müssten Sie auch daran denken, den JSON wieder in einen Python-String zu decodieren, wenn Sie die Datenbank abfragen. Das versuchten die Antworten auf die andere Frage zu vermitteln.
Wenn beispielsweise var4
ist die Liste, könnten Sie verwenden:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))