Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Python-Mysql-Fetch-Abfrage

Das verwirrt fast jeden, der mit MySQLDB arbeitet. Sie übergeben Argumente an die Ausführungsfunktion und führen keine Python-Zeichenfolgenersetzung durch. Das %s in der Abfragezeichenfolge wird eher wie eine vorbereitete Anweisung als eine Python-Zeichenfolgenersetzung verwendet. Dies verhindert auch die SQL-Injection, da MySQLDB das Escape für Sie übernimmt. Wie Sie es zuvor hatten (mit % und Zeichenfolgensubstitution), sind Sie anfällig für Injektionen.

  1. Verwenden Sie keine Anführungszeichen. MySQLDB wird sie dort ablegen (falls erforderlich).
  2. Verwenden Sie anstelle von % ein . Auch hier übergeben Sie ein Tupel als Argument an die Ausführungsfunktion.

    self.dbc.execute("select * from car where reg=%s" , (reg,))