轉載自:http://blog.csdn.net/chenxiao_ji/article/details/51332791
需求:
做項目的過程中,使用了MySQL數據庫,後臺使用Python來做邏輯層。項目中需要實現一個功能,通過輸入搜索框中的字符去MySQL中找到匹配的文章的標題。
SQL語句:
SELECT * FROM T_ARTICLE WHERE title LIKE '%searchStr%'
報錯:
但是在Python中%是一個格式化字符,所以如果需要使用%則需要寫成%%。從網上查了一些帖子,大多數人的回答是:
cur.execute("SELECT* from T_ARTICLE WHERE title LIKE '%%%s%%'" % searchStr)
或者
cur.execute("SELECT* from T_ARTICLE WHERE title LIKE %s" % ('%%%s%%' % searchStr))
這樣print出SQL語句之後爲:
SELECT * FROM T_ARTICLE WHERE title LIKE '%生活%'
並且會報錯 TypeError: not enough arguments for format string
這個錯誤很明顯是提示格式化的時候出現了問題。
解決:
最終將在Python中執行的sql語句改爲:
sql = "SELECT * FROM T_ARTICLE WHERE title LIKE '%%%%%s%%%%'" % searchStr
執行成功,print出SQL語句之後爲:
SELECT * FROM T_ARTICLE WHERE title LIKE '%%生活%%'
原因:
Python在執行sql語句的時候,同樣也會有%格式化的問題,仍然需要使用%%來代替%。因此要保證在執行sql語句的時候格式化正確。而不只是在sql語句(字符串)的時候正確。