Gør ikke brug strengformatering til at interpolere SQL-værdier. Brug SQL-parametre:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Her er %s
er SQL-parametre; databasen sørger derefter for at undslippe værdierne (indgivet som det 2. argument til `cursor.execute) for dig.
Præcis hvilken syntaks du skal bruge afhænger af din databaseadapter; nogle bruger %s
, andre bruger ?
for pladsholderne.
Du kan ellers ikke bruge Python-beholdere, som en liste, til disse parametre. Du skal først serialisere det til et strengformat; du kunne bruge JSON til det, men så skulle du også huske at afkode JSON'en til en Python-streng igen, når du forespørger i databasen. Det er, hvad svarene på det andet spørgsmål forsøgte at formidle.
For eksempel, hvis var4
er listen, kan du bruge:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))