Python中使用變數進行參數化SQL查詢
在Python中,參數化SQL查詢對於防止SQL注入至關重要。雖然建議的方法是將變數直接傳遞給execute函數,但在某些情況下,使用變數來表示查詢本身也是可取的。
將查詢當作變數:語法錯誤
嘗試直接從變數執行SQL查詢(如下圖)會導致語法錯誤:
<code>sql = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3 cursor.execute(sql)</code>
Execute函數
cursor.execute
函數的簽章規定它最多接受三個參數:
<code>cursor.execute(self, query, args=None)</code>
因此,將包含查詢和參數的變數作為單一參數傳遞是不正確的。
解
為了解決這個問題,有兩種可能的解決方案:
使用參數展開的元組:
<code>sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3 cursor.execute(*sql_and_params)</code>
但是,如果元組元素超過三個,這種方法可能會導致錯誤。
分離查詢與參數:
或者,可以將查詢和參數分開:
<code>sql = "INSERT INTO table VALUES (%s, %s, %s)" args = var1, var2, var3 cursor.execute(sql, args)</code>
這種方法比較冗長,但可以確保將正確數量的參數傳遞給execute函數。
以上是如何透過 Python 的 `cursor.execute()` 函數在 SQL 查詢中安全地使用變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!