Не используйте «ввод строки» в ваш SQL, за исключением случаев, когда это действительно необходимо, например, str(DEPT)
здесь, чтобы выбрать, из какой таблицы вы выбираете. В любом другом случае используйте вместо этого функцию передачи параметров API-интерфейса DB Python - он будет правильно для вас заключать в кавычки и автоматически защищать вас от атак «SQL-инъекция», среди прочего. (Иногда может быть и быстрее).
Так как MySQLdb использует неудачную нотацию %s
для параметров, вот что вы должны сделать (также исправление стиля, чтобы оно было PEP8-совместимым, не обязательно, но не повредит; -):
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 в строковом форматировании, которое производит q
, становится единым %
каждый при форматировании, поэтому q
остается с двумя вхождениями %s
- которые execute
аккуратно заполняет с правильно отформатированными версиями CLASS
и SEC
. Все вызовы str
являются избыточными и т. Д.
Кроме того, если вы работаете на Python 2.6 или более поздней версии, для форматирования строк вы должны использовать новый метод format
вместо старого оператора %
- это избавляет вас от необходимости "удваивать" % знаки ", среди других преимуществ. Я не применял это изменение в приведенном выше фрагменте на тот случай, если вы застряли с версией 2.5 или более ранней (поэтому приведенный выше код работает в любой версии Python, а не только в достаточно недавней).