Problemet er sandsynligvis brugen af %s
for kolonnenavnet. Det betyder SQL-driveren vil forsøge at undslippe denne variabel, når den interpoleres, inklusive citering, hvilket ikke er, hvad du ønsker for ting som kolonnenavne, tabelnavne osv.
Når du bruger en værdi i SELECT
, WHERE
osv., så ønsker du at bruge %s
for at forhindre SQL-injektioner og muliggør blandt andet citering.
Her vil du bare interpolere ved hjælp af ren python. Det betyder også, at ingen bindinger overføres til execute-metoden.
def findmin(column):
cur = db.cursor()
sql = "SELECT MIN({0}) FROM table".format(column)
cur.execute(sql)
mintup = cur.fetchone()
SQL violin, der viser, at SQL fungerer:
http://sqlfiddle.com/#!2/e70a41/1