Doe niet gebruik tekenreeksopmaak om SQL-waarden te interpoleren. Gebruik SQL-parameters:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Hier de %s
zijn SQL-parameters; de database zorgt vervolgens voor het escapen van de waarden (doorgegeven als het 2e argument aan `cursor.execute) voor u.
Welke syntaxis u precies moet gebruiken, hangt af van uw database-adapter; sommigen gebruiken %s
, anderen gebruiken ?
voor de tijdelijke aanduidingen.
U kunt voor deze parameters geen Python-containers, zoals een lijst, gebruiken. Je zou dat eerst moeten serialiseren naar een string-formaat; je zou daarvoor JSON kunnen gebruiken, maar dan moet je er ook aan denken om de JSON opnieuw te decoderen in een Python-string wanneer je de database opvraagt. Dat is wat de antwoorden op de andere vraag probeerden over te brengen.
Als bijvoorbeeld var4
is de lijst, je zou kunnen gebruiken:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))