För att undvika injektioner, använd execute
med %s
i stället för varje variabel, skicka sedan värdet via en lista eller tupel som den andra parametern för execute
. Här är ett exempel från dokumentationen
:
c=db.cursor()
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""", (max_price,))
Observera att detta använder ett komma , inte % (vilket skulle vara ett direkt strängbyte, inte escaped). Gör inte detta :
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""" % (max_price,))
Dessutom får du inte använda enstaka citattecken runt positionsinnehavaren ('%s'
). ) om parametern är en sträng eftersom drivrutinen tillhandahåller dessa.