Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di Python per accedere a SQL con un nome di colonna variabile

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