Python MySQL の IN 句内でリストをネストする
P粉781235689
2023-08-22 17:04:59
<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>
この質問は古いものですが、他の人が私が探しているものを探している場合に備えて返信を残したいと思いました
受け入れられた答えは、パラメーターがたくさんある場合、または名前付きパラメーターを使用したい場合に混乱を招きます
いくつかの試みの後
リーリーpython2.7
およびpymysql==0.7.11
でテストされ、合格しました直接使用
リーリーlist_of_ids
:こうすることで、自分自身を引用することを避け、さまざまな SQL インジェクションの問題を回避できます。
データ (
list_of_ids
) は (クエリ テキストではなく) パラメーターとして mysql のドライバーに直接渡されるため、インジェクションの問題は発生しないことに注意してください。文字を削除したり引用したりせずに、文字列内の任意の文字を保持できます。