Detta förvirrar nästan alla som arbetar med MySQLDB. Du skickar argument till exekveringsfunktionen, gör inte pythonsträngbyte. %s i frågesträngen används mer som en förberedd sats än en pythonsträngsersättning. Detta förhindrar också SQL-injektion eftersom MySQLDB kommer att göra flykten åt dig. Som du hade det tidigare (med % och strängsubstitution) är du sårbar för injektion.
- Använd inte citattecken. MySQLDB kommer att placera dem där (om det behövs).
-
Använd en istället för en %. Återigen, du skickar en tupel som ett argument till exekveringsfunktionen.
self.dbc.execute("välj * från bil där reg=%s" , (reg,))