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

Verwenden von Python für den Zugriff auf SQL mit einem variablen Spaltennamen

Das Problem ist wahrscheinlich die Verwendung von %s für den Spaltennamen. Das bedeutet den SQL-Treiber versucht, diese Variable beim Interpolieren zu maskieren, einschließlich Anführungszeichen, was für Dinge wie Spaltennamen, Tabellennamen usw. nicht erwünscht ist.

Bei Verwendung eines Werts in SELECT , WHERE , usw., dann möchten Sie %s verwenden um SQL-Injections zu verhindern und unter anderem das Zitieren aktivieren.

Hier möchten Sie nur mit reinem Python interpolieren. Das bedeutet auch, dass kein Bindings-Tupel an die execute-Methode übergeben wird.

def findmin(column):
    cur = db.cursor()
    sql = "SELECT MIN({0}) FROM table".format(column)
    cur.execute(sql)
    mintup = cur.fetchone()

SQL-Geige, die die SQL-Funktion zeigt:

http://sqlfiddle.com/#!2/e70a41/1