2017-05-05 62 views
1

我在Linux和Python 2.7上運行[Water] Meter Data Management系統。我一直在閱讀SO帖子,如this適用於3.x之前的正確SQL查詢Python

什麼是構建查詢的正確,安全的語法,而不必使用涉及%s的安全性較低的方法?

rc = test_cur.execute("select m.* from meter m where m.acct_no = '%s' ", acct_no)

我試圖根據我收到錯誤的幾種方法。

回答

2

%s這裏不代表Python字符串格式化佔位符。在這種情況下,這是一個MySQL驅動程序query parameterization placeholder。數據庫驅動程序將佔位符替換爲​​的單獨參數中傳遞的參數。這與常規字符串格式不同。

rc = test_cur.execute("select m.* from meter m where m.acct_no = %s", (acct_no,)) 

還要注意acct_no封閉在元組: -

請注意,您不需要%s各地報價在這種情況下,如果根據參數類型,需要使用引號驅動程序會自動決定

+0

謝謝你的幫助。 – octopusgrabbus