如果參數是字符串,Django的原始SQL功能會在傳遞給SQL查詢的任何參數周圍添加單引號。是否有可能阻止Django圍繞原始SQL參數添加引號?
這打破了我,當我需要做這樣的查詢:
SELECT * FROM table WHERE id IN (%s)
的參數是一個字符串,如「1,2,3」,所以Django的渲染查詢爲:
SELECT * FROM table WHERE id IN ('1,2,3')
周圍帕拉姆這些報價中斷查詢。
在我看來,Django迫使我使用字符串插值(即在參數在原始查詢中使用之前將參數注入到字符串中),但文檔明確指出我們不應該那樣做。
從文檔:
使用把params參數完全保護您免受SQL注入攻擊 ,共同開發,其中攻擊者注入任意SQL進入 數據庫。如果你使用字符串插值,遲早你會成爲SQL注入的犧牲品。只要你記得總是使用 params參數,你就會受到保護。
有沒有辦法關掉報價?如果我們想要報價,我們可以添加它們,不是嗎? (例如WHERE name ='%s')
我明白了。它接受一個整數列表。我想我必須將整數列表格式化爲一個字符串,這就是我如何得到引號。 – John