Nie użyj formatowania ciągów do interpolacji wartości SQL. Użyj parametrów SQL:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Tutaj %s
są parametrami SQL; baza danych zajmie się następnie ucieknięciem wartości (przekazywanych jako drugi argument do `cursor.execute) za ciebie.
Dokładna składnia, której należy użyć, zależy od adaptera bazy danych; niektórzy używają %s
, inni używają ?
dla symboli zastępczych.
Nie można inaczej używać kontenerów Pythona, takich jak lista, dla tych parametrów. Musiałbyś najpierw serializować to do formatu ciągu; możesz użyć do tego JSON, ale wtedy będziesz musiał również pamiętać, aby ponownie zdekodować JSON na ciąg Pythona, gdy wysyłasz zapytanie do bazy danych. To właśnie próbowały przekazać odpowiedzi na inne pytanie.
Na przykład, jeśli var4
to lista, której możesz użyć:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))