Dit verwart zowat iedereen die met MySQLDB werkt. U geeft argumenten door aan de functie execute, geen vervanging van python-tekenreeksen. De %s in de querytekenreeks wordt meer gebruikt als een voorbereide instructie dan als een vervanging van een Python-tekenreeks. Dit voorkomt ook SQL-injectie, omdat MySQLDB de escape voor u zal doen. Zoals u het eerder had (met behulp van % en tekenreeksvervanging), bent u kwetsbaar voor injectie.
- Gebruik geen aanhalingstekens. MySQLDB zal ze daar plaatsen (indien nodig).
-
Gebruik een , in plaats van een %. Nogmaals, je geeft een tuple door als argument voor de functie execute.
self.dbc.execute("select * from car where reg=%s" , (reg,))