like模糊查詢的占位符使用


問題:

python調用sqlite3數據庫需要使用like模糊查詢,一條普通的like查詢語法如下:

SELECT * FROM article WHERE content LIKE '%python%'
  • 1

放在程序中,使用sqlite3的查詢語句大概變成下面這樣:

conn.execute("SELECT * FROM article WHERE content LIKE '%?%'",(value,))
  • 1

然后執行會報以下的錯誤:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.
  • 1

意思是你沒使用statement,但卻提供了一個statement參數,這是因為statement占位符”?”處在雙引號和單引號的雙重包裹之中,檢測不出來是個占位符!
首先一點,sql語句拼接可以方便的解決這個問題,但是肯定留下一個注入點,十分不安全,是絕對不能使用的。
最終

解決方案

conn.execute("SELECT * FROM article WHERE content LIKE ?", ('%' + value + '%',))
  • 1

巧妙的使用普通statement占位符”?”,傳入值時使用拼接的”%value%”形式,完美的解決了問題,其它類似問題也可以借鑒這個思想。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM