在 Python 中從變數執行參數化 SQL 查詢
為了防止 SQL 注入,在 Python 中執行參數化 SQL 查詢時,通常建議使用以下格式:
<code class="language-python">cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3)</code>
但是,關於是否可以將查詢儲存在變數中稍後執行的問題,值得探討。
execute()
方法簽章
要理解為什麼這可能無法工作,我們需要檢查 execute()
方法的簽名:
<code class="language-python">cursor.execute(self, query, args=None)</code>
此方法最多需要三個參數:一個查詢和一個可選的參數序列或映射。
嘗試從變數執行查詢
如果我們嘗試執行儲存在變數 sql
中的查詢,例如:
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql)</code>
我們將收到錯誤,因為 sql
包含四個參數,包括變數本身。
分離查詢與參數
要從變數執行查詢,我們可以分離查詢和參數:
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" args = var1, var2, var3 cursor.execute(sql, args)</code>
在這種情況下,sql
包含查詢,args
包含參數。透過指定 execute(sql, args)
,我們可以成功執行參數化查詢。
另一種方法
或者,我們可以使用更直觀的雙變量方法:
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql, (var1, var2, var3))</code>
這種方法消除了為查詢和參數建立單獨變數的需要。
以上是我可以在 Python 中執行儲存在變數中的參數化 SQL 查詢嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!