使用MySQLdb 執行「SELECT ... WHERE ... IN ...」
使用IN 子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢時使用子句執行SQL 查詢MySQLdb,請務必注意查詢參數的建構方式。
問題
使用者在嘗試選擇 bar 所在的 fooids 時遇到問題 ( '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中文網其他相關文章!