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