ホームページ  >  に質問  >  本文

Python MySQL の IN 句内でリストをネストする

<p>リストを文字列にマッピングする方法は知っています。</p> <pre class="brush:php;toolbar:false;">foostring = ",".join(map(str, list_of_ids) )</pre> <p></p> を使用してその文字列を IN 句に挿入できることはわかっています。 <pre class="brush:php;toolbar:false;">cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))</pre> <p>安全な方法 (SQL インジェクションを回避) で同じ機能を MySQL データベースに実装する必要があります。上記の例では、foostring が実行パラメータとして渡されていないため、脆弱です。また、MySQL ライブラリの外でクォートとエスケープを行う必要があります。 </p> <p> (関連する SO 質問がありますが、そこにリストされている回答は MySQL データベースでは機能しないか、SQL インジェクション攻撃に対して脆弱です。) </p>
P粉781235689P粉781235689424日前455

全員に返信(2)返信します

  • P粉434996845

    P粉4349968452023-08-23 15:50:40

    この質問は古いものですが、他の人が私が探しているものを探している場合に備えて返信を残したいと思いました

    受け入れられた答えは、パラメーターがたくさんある場合、または名前付きパラメーターを使用したい場合に混乱を招きます

    いくつかの試みの後

    リーリー

    python2.7 および pymysql==0.7.11 でテストされ、合格しました

    返事
    0
  • P粉212114661

    P粉2121146612023-08-23 00:26:09

    直接使用list_of_ids:

    リーリー

    こうすることで、自分自身を引用することを避け、さまざまな SQL インジェクションの問題を回避できます。

    データ (list_of_ids) は (クエリ テキストではなく) パラメーターとして mysql のドライバーに直接渡されるため、インジェクションの問題は発生しないことに注意してください。文字を削除したり引用したりせずに、文字列内の任意の文字を保持できます。

    返事
    0
  • キャンセル返事