non utilizzare la formattazione delle stringhe per interpolare i valori SQL. Usa parametri SQL:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Qui il %s
sono parametri SQL; il database si occupa quindi di eseguire l'escape dei valori (passati come secondo argomento a `cursor.execute) per te.
La sintassi esatta che devi usare dipende dall'adattatore del tuo database; alcuni usano %s
, altri usano ?
per i segnaposto.
Altrimenti non puoi usare i contenitori Python, come un elenco, per questi parametri. Dovresti prima serializzarlo in un formato stringa; potresti usare JSON per quello, ma dovresti anche ricordarti di decodificare nuovamente il JSON in una stringa Python quando esegui query sul database. Ecco cosa hanno cercato di trasmettere le risposte all'altra domanda.
Ad esempio, se var4
è la lista, potresti usare:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))