Il problema è probabilmente l'uso di %s
per il nome della colonna. Ciò significa il Driver SQL proverà a sfuggire a quella variabile durante l'interpolazione, comprese le virgolette, che non è quello che vuoi per cose come nomi di colonne, nomi di tabelle, ecc.
Quando si utilizza un valore in SELECT
, WHERE
, ecc. allora vuoi usare %s
per prevenire iniezioni SQL e abilita la quotazione, tra le altre cose.
Qui, vuoi solo interpolare usando python puro. Ciò significa anche che nessuna tupla di binding è passata al metodo execute.
def findmin(column):
cur = db.cursor()
sql = "SELECT MIN({0}) FROM table".format(column)
cur.execute(sql)
mintup = cur.fetchone()
Fiddle SQL che mostra il funzionamento di SQL:
http://sqlfiddle.com/#!2/e70a41/1