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

Python- og mySQLdb-fejl:OperationalError:(1054, Ukendt kolonne i 'where-klausul')

Brug ikke "strenginjektion" i din SQL undtagen i tilfælde, hvor det virkelig er uundværligt, såsom str(DEPT) her for at vælge hvilket bord du vælger fra. For hvert andet tilfælde skal du bruge parameteroverførselsfunktionen i Python DB API i stedet -- den vil citere tingene korrekt for dig og automatisk forsvare dig mod "SQL-injektion"-angreb, blandt andet. (Det kan også være hurtigere nogle gange).

Da MySQLdb bruger den uheldige notation %s for parametre, her er, hvad du skal gøre (også fikse stilen til at være PEP8-kompatibel, ikke påkrævet, men kan ikke skade;-):

conn = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="dbase")
cursor = conn.cursor()
q = 'SELECT * FROM %s WHERE course=%%s AND sec = %%s""" % (DEPT,)
cursor.execute(q, (CLASS, SEC))

%% s i strengformateringen, som producerer q blive en enkelt % hver ved formatering, så q er tilbage med to forekomster af %s -- som execute udfyldes pænt med korrekt formaterede versioner af CLASS og SEC . Alle str opkald er overflødige osv.

Som en sidebemærkning, hvis du er på Python 2.6 eller nyere, til strengformatering bør du bruge det nye format metode i stedet for den gamle % operatør -- der sparer dig for behovet for disse "fordoblede %-tegn", blandt andre fordele. Jeg har ikke anvendt den ændring i ovenstående uddrag, bare hvis du sidder fast med 2.5 eller tidligere (så koden ovenfor fungerer i enhver version af Python, i stedet for kun i rimeligt nyere).



  1. MySQL tilføje streng

  2. Tilslut ODBC-applikationer på Windows til Zoho CRM

  3. MySQL viser alle datoer i mellem området

  4. MySQL UNIQUE-nøgle virker ikke