MySQLdb を使用した「SELECT ... WHERE ... IN ...」の実行
IN 句を含む SQL クエリを実行する場合MySQLdb を使用する場合、クエリ パラメータの構築方法に注意することが重要です。
問題
ユーザーが bar が含まれる fooid を選択しようとしたときに問題が発生しました ( 'A'、'C') Python と MySQLdb を使用します。同じクエリが mysql コマンドラインから動作したにもかかわらず、Python では行が返されませんでした。
根本原因
この問題は、MySQLdb がパラメータ化された引数 [' を変換したために発生しました。 A','C'] を ("'A'","'C'") に変更すると、IN 句の値の周りに引用符が多すぎます。
解決策
クエリを正しく実行するには、クエリ パラメータを手動で構築する必要があります。次の Python コードは、これを実現する方法を示しています。
Python 3:
<code class="python">args = ['A', 'C'] sql = 'SELECT fooid FROM foo WHERE bar IN (%s)' in_p = ', '.join(list(map(lambda x: '%s', args))) sql = sql % in_p cursor.execute(sql, args)</code>
Python 2:
<code class="python">args = ['A', 'C'] sql = 'SELECT fooid FROM foo WHERE bar IN (%s)' in_p = ', '.join(map(lambda x: '%s', args)) sql = sql % in_p cursor.execute(sql, args)</code>
以上がMySQLdb SELECT ... WHERE ... IN ... クエリが結果を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。