To myli prawie każdego, kto pracuje z MySQLDB. Przekazujesz argumenty do funkcji execute, nie wykonując podstawiania ciągów Pythona. %s w ciągu zapytania jest używany bardziej jak przygotowana instrukcja niż podstawienie ciągu Pythona. Zapobiega to również wstrzykiwaniu SQL, ponieważ MySQLDB wykona za Ciebie ucieczkę. Jak już wcześniej (używając % i podstawiania ciągów), jesteś podatny na wstrzyknięcie.
- Nie używaj cudzysłowów. MySQLDB umieści je tam (w razie potrzeby).
-
Użyj a zamiast %. Ponownie przekazujesz krotkę jako argument do funkcji execute.
self.dbc.execute("wybierz * z samochodu, gdzie reg=%s" , (reg,))