str(DEPT)など、本当に不可欠な場合を除いて、SQLに「文字列インジェクション」を使用しないでください。 ここで、選択するテーブルを選択します。それ以外の場合は、代わりにPython DB APIのパラメーター受け渡し機能を使用してください。これにより、適切に引用され、「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が2回出現します --execute 正しくフォーマットされたバージョンのCLASSをきれいに入力します およびSEC 。すべてのstr 呼び出しは冗長などです。
余談ですが、Python 2.6以降を使用している場合は、文字列の書式設定に新しいformatを使用する必要があります。 古い%の代わりにメソッド 演算子-他の利点の中でも、これらの「2倍の%記号」の必要性からあなたを救います。 2.5以前で立ち往生している場合に備えて、上記のスニペットにその変更を適用していません(したがって、上記のコードは、かなり最近のバージョンではなく、どのバージョンのPythonでも機能します)。