Python SQLite 在 LIKE 中使用通配符替换参数
- 2025-03-21 09:06:00
- admin 原创
- 59
问题描述:
我正在尝试使用 Python 的 Sqlite 库进行参数化的 LIKE 查询,如下所示:
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%'"...
返回数百个结果
有什么建议吗?
解决方案 1:
引号可防止?
或:name
被当作占位符使用——它们按字面意思理解。您需要将百分号放在要传递的字符串两边,并使用不带引号的普通占位符。例如:
self.cursor.execute(
"select string from stringtable where string like ? and type = ?",
('%'+searchstr+'%', type))
请注意,它们都没有?
用引号引起来 —— 这正是它们应该被用作占位符的原因。
解决方案 2:
虽然这不是一个确切的答案,并且不是为了成为一个答案,但是这个解决方案仍然试图回答“LIKE 中的参数替换”,因为标题也引起了人们的注意(就像它对我一样)
我以类似的方式工作,并将两种风格结合在一起。这样,用户可以将字段名称输入函数中,同时将“%”输入到搜索参数本身中。
虽然字段名称需要清理,但它足以用于小型测试项目。此外,将“%”通配符从查询移动到参数允许用户使用其他通配符。
数据库.py
def find_item(field,term):
cursor.execute("""
SELECT rowid,* FROM customers
WHERE (%s) LIKE ?
"""%field,(term,))
应用程序
import database
database.find_item("first_name","%li%")
database.find_item("email","_li%")
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD