sql >> データベース >  >> RDS >> Mysql

PythonおよびmySQLdbエラー:OperationalError:(1054、'where句'の不明な列)

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



    1. グループ化によるMySQLの削除

    2. OracleのLN()関数

    3. MySQLトランザクションと同時挿入

    4. MySQLのテーブルのすべての列を削除するにはどうすればよいですか?