sql >> Databasteknik >  >> RDS >> Mysql

Använder Python för att komma åt SQL med ett variabelt kolumnnamn

Problemet är troligen användningen av %s för kolumnnamnet. Det betyder SQL-drivrutinen kommer att försöka undvika den variabeln när den interpoleras, inklusive citat, vilket inte är vad du vill ha för saker som kolumnnamn, tabellnamn, etc.

När du använder ett värde i SELECT , WHERE , etc. så vill du använda %s för att förhindra SQL-injektioner och möjliggör bland annat citering.

Här vill du bara interpolera med ren python. Det betyder också att inga bindningar skickas till exekveringsmetoden.

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

SQL-fiol som visar att SQL fungerar:

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




  1. Hur får man bara tabeller, inte vyer med hjälp av SHOW TABLES?

  2. Fjädersats med kolumnalias som sorteringsnyckel - felaktig where-sats

  3. Hur gör man en skiftlägeskänslig sökning i WHERE-satsen (jag använder SQL Server)?

  4. Ett tabellnamn som en variabel