我试图在Python中形成一个已清理的查询字符串,以便在SQLite3中使用。它需要采取最终形式:
SELECT * FROM Players WHERE PlayerName LIKE '%bob%'
...所以我可以进行模式搜索。
理想情况下我想要一个?在查询中,我可以在运行查询时插入搜索字符串并阻止 Bobby Tables 类型事件发生(不是我不得不担心这个):
search_string = "bob"
query = "SELECT * FROM Players WHERE PlayerName LIKE '%?%'"
cur.execute(query, (search_string))
运行它给了我:
sqlite3.ProgrammingError:提供的绑定数量不正确。该 当前语句使用0,并且提供了3个。
所以我很确定问题是使用单引号,百分比和问号,但是相当困难 - 我无法形成查询,因此python认为它需要绑定。
最好的方法是什么,或者在SQL中为模式搜索形成清理查询是否有更好的做法?
更新:最后一行是:
cur.execute(query, [('%' + search_string + '%')])
答案 0 :(得分:0)
query = "SELECT * FROM Players WHERE PlayerName LIKE '%' + ? + '%'"
您只需将变量(?)分开。
答案 1 :(得分:0)
在?
之后使用单独占位符LIKE
,并在参数分配期间将search_string
与%
一起打包:
...
search_string = 'bob'
query = 'SELECT * FROM Players WHERE PlayerName LIKE ?'
cur.execute(query, ('%' + search_string + '%'))