2017-05-05 2 views
1

Ich verwende ein [Water] Meter Data Management-System auf Linux und Python 2.7. Ich habe SO Beiträge wie this gelesen.Korrekte SQL-Abfragen für Pre-3.x Python

Was ist die richtige, sichere Syntax zum Erstellen einer Abfrage und nicht die weniger sichere Methode mit %s zu verwenden?

rc = test_cur.execute("select m.* from meter m where m.acct_no = '%s' ", acct_no)

Ich habe mehr Möglichkeiten ausprobiert, basierend auf dem Fehler, die ich immer bin.

Antwort

2

Die %s hier stellt keinen Python-String-Formatierungs-Platzhalter dar. In diesem Fall ist dies ein MySQL-Treiber query parameterization placeholder. Die Platzhalter werden durch den Datenbanktreiber ersetzt, wobei die Parameter in einem separaten Argument an execute() übergeben werden. Dies unterscheidet sich von der normalen Formatierung von Strings.

Beachten Sie, dass Sie Zitate brauchen nicht um den %s in diesem Fall - der Fahrer entscheidet automatisch, ob Anführungszeichen je nach Parametertyp benötigt werden:

rc = test_cur.execute("select m.* from meter m where m.acct_no = %s", (acct_no,)) 

Auch die in einem Tupel eingeschlossen acct_no beachten.

+0

Danke das war hilfreich. – octopusgrabbus

Verwandte Themen