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

Was ist die beste Escape-Zeichenstrategie für die Python/MySQL-Kombination?

Hier ist ein Beispiel:

import MySQLdb
column = str(MySQLdb.escape_string(row[1]))
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 
cursor2.execute(query, [row[3], row[0]])

Aktualisieren

Hier ist ein kurzer Kommentar:

column = str(MySQLdb.escape_string(row[1]))

Es ist immer eine gute Idee, alles zu maskieren, was in eine Abfrage einfließt. In diesem Fall fügen wir dynamisch einen Spaltennamen hinzu und müssen daher maskiert werden, bevor die Abfrage ausgeführt wird.

query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 

Ich bilde hier die Abfrage. Ich versuche, zwei Dinge zu erreichen:(1) eine Abfrage mit Spaltennamen zu erstellen, die mit der column ausgefüllt werden Variable, die in der vorherigen Zeile (2) deklariert wurde, fügt Platzhalter hinzu, die während der Abfrageausführung durch tatsächliche Parameter ausgefüllt werden.

Das Snippet dict(column = column) ist eigentlich eine andere Möglichkeit, das Wörterbuch {'column': column} zu erstellen . Dies wird durch das dict ermöglicht Konstrukteur. Ich möchte die anderen Platzhalter noch nicht ausfüllen, also maskiere ich sie mit zwei Prozentzeichen (%% ).

cursor2.execute(query, [row[3], row[0]])

Führen Sie abschließend die Abfrage aus. Wenn Sie die Abfrage vor der Ausführung drucken, sehen Sie die Zeichenfolge update myTable set column_name = %s where ID = %s .