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でも機能します)。