在SQLite3和Python中为模式搜索形成一个已清理的查询字符串

时间:2013-01-07 15:52:16

标签: python sql sqlite

我试图在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 + '%')])

2 个答案:

答案 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 + '%'))