Per evitare iniezioni, usa execute
con %s
al posto di ogni variabile, quindi passa il valore tramite una lista o una tupla come secondo parametro di execute
. Ecco un esempio dalla documentazione
:
c=db.cursor()
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""", (max_price,))
Nota che questo sta usando una virgola , non % (che sarebbe una sostituzione di stringa diretta, non con escape). Non farlo :
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""" % (max_price,))
Inoltre, non devi utilizzare virgolette singole attorno al detentore della posizione ('%s'
) se il parametro è una stringa poiché il driver li fornisce.