Nepoužívejte "string injection" do vašeho SQL s výjimkou případů, kdy je to skutečně nezbytné, jako je str(DEPT) zde si můžete vybrat, ze kterého stolu vybíráte. Pro každý jiný případ použijte místo toho funkci předávání parametrů v Python DB API – bude za vás věci správně citovat a mimo jiné vás automaticky ochrání před útoky typu „SQL injection“. (Někdy to může být i rychlejší).
Protože MySQLdb používá nešťastnou notaci %s pokud jde o parametry, zde je to, co byste měli udělat (také opravit styl tak, aby vyhovoval PEP8, není vyžadováno, ale nemůže ublížit;-):
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 ve formátování řetězce, které vytváří q stát se jedním % každý při formátování, takže q je ponechán se dvěma výskyty %s -- které execute se úhledně vyplní správně naformátovanými verzemi CLASS a SEC . Všechny str hovory jsou nadbytečné atd.
Kromě toho, pokud používáte Python 2.6 nebo novější, pro formátování řetězců byste měli použít nový format namísto starého % operátor -- to vás kromě jiných výhod zbaví potřeby těch "zdvojených % znaků". Tuto změnu jsem ve výše uvedeném úryvku neaplikoval jen pro případ, že jste zůstali u verze 2.5 nebo starší (takže výše uvedený kód funguje v jakékoli verzi Pythonu, nikoli pouze v těch přiměřeně nejnovějších).