在LIKE中使用通配符替换Python SQLite参数
问题内容:
我正在尝试将参数化的LIKE查询与Python的Sqlite库一起使用,如下所示:
self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type))
但是?通配符的内部没有被评估,这让我错了:
"sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied."
我还尝试将标记的查询版本用于:
like '%:searchstr%'
并且在列表中具有 {"searchstr":searchstr...
但是当我这样做时,查询会运行,但是即使手动将"like '%a%'"...
返回的数百个结果按原样应该输入,也不会返回任何结果
有什么建议吗?
问题答案:
引号可以保护?
或:name
防止被用作占位符-它们是按字面意义使用的。您需要将百分号放在要传递的字符串周围,并使用不带引号的普通占位符。即:
self.cursor.execute(
"select string from stringtable where string like ? and type = ?",
('%'+searchstr+'%', type))
请注意,两者都不用?
引号引起来,这与将它们用作占位符完全相同。