2

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

2 回答 2

0
query = "SELECT * FROM Players WHERE PlayerName LIKE '%' + ? + '%'"

您只需要分隔变量(?)。

于 2013-01-07T15:55:01.810 回答
0

在参数分配期间使用单独的占位符?afterLIKE和 wrap search_stringwith :%

...
search_string = 'bob'
query = 'SELECT * FROM Players WHERE PlayerName LIKE ?'
cur.execute(query, ('%' + search_string + '%'))
于 2013-01-07T16:32:55.563 回答