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

Brug af Python til at få adgang til SQL med et variabelt kolonnenavn

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




  1. PreparedStatement ignorerer parametre i forespørgslen:java.sql.SQLException:Parameterindeks uden for område (1> antal parametre, som er 0)

  2. MySQL-sortering til at gemme flersprogede data på ukendt sprog

  3. Sådan fungerer FORMAT()-funktionen i SQL Server (T-SQL)

  4. Hvordan konverterer man rækkeværdier til kolonner med dynamiske kolonnetællinger?