Non usare "string injection" nel tuo SQL tranne nei casi in cui è veramente indispensabile, come str(DEPT)
qui per scegliere da quale tabella stai selezionando. Per ogni altro caso, usa invece la funzione di passaggio dei parametri dell'API Python DB:citerà le cose correttamente per te e ti difenderà automaticamente dagli attacchi "SQL injection", tra le altre cose. (Può anche essere più veloce, a volte).
Poiché MySQLdb usa la sfortunata notazione %s
per i parametri, ecco cosa dovresti fare (fissando anche lo stile in modo che sia conforme a PEP8, non richiesto ma non fa male;-):
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))
Il %%
s nella formattazione della stringa che produce q
diventa un unico %
ciascuno durante la formattazione, quindi q
rimangono due occorrenze di %s
-- che execute
si integra perfettamente con le versioni formattate correttamente di CLASS
e SEC
. Tutti i str
le chiamate sono ridondanti, ecc.
Per inciso, se utilizzi Python 2.6 o versioni successive, per la formattazione delle stringhe dovresti usare il nuovo format
metodo invece del vecchio %
operatore -- che ti salva dalla necessità di quei "segni di % raddoppiati", tra gli altri vantaggi. Non ho applicato quella modifica nello snippet sopra nel caso tu sia bloccato con 2.5 o precedenti (quindi il codice sopra funziona in qualsiasi versione di Python, invece che solo in quelle ragionevolmente recenti).