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
1つになるため、 -の2つのオカレンスが残ります。これは、との正しくフォーマットされたバージョンできれいに埋められます。すべての呼び出しは冗長です。%
q
%s
execute
CLASS
SEC
str
余談ですが、Python 2.6以降を使用している場合、文字列の書式設定format
には、古い演算子の代わりに新しいメソッドを使用%
する必要があります。これにより、「%記号を2倍にする」などの利点がなくなります。2.5以前で立ち往生している場合に備えて、上記のスニペットにその変更を適用していません(したがって、上記のコードは、かなり最近のバージョンではなく、どのバージョンのPythonでも機能します)。