You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中使用?占位符的LIKE语句实现电影标题子串匹配的问题

错误写法的核心问题
  • 带%?%的查询失效原因:Python DB-API规范下的*?*占位符是独立的参数值位置标记,不能被SQL层的通配符%直接包裹在查询字符串中,数据库解析时会将%?%判定为非法语法,无法正确关联传入的参数。
  • 直接字符串拼接的问题:将命令行输入直接拼接到SQL字符串中,完全丧失参数化查询防SQL注入的安全优势,一旦输入内容包含单引号、转义特殊字符,会直接触发SQL语法报错,稳定性极差。
可用的正确实现

将通配符%拼接到传入查询的关键词变量中,查询语句内仅保留独立的参数占位符即可:

# 为关键词拼接前后匹配通配符
match_cond = f"%{sys.argv[1]}%"
query = "SELECT m.year FROM movie m WHERE m.title LIKE ?"
cur.execute(query, (match_cond,))

补充:如果需要实现不区分大小写的子串匹配,可根据所用数据库追加排序规则,例如SQLite环境下可改写查询为 SELECT m.year FROM movie m WHERE m.title LIKE ? COLLATE NOCASE。


内容的提问来源于stack exchange,提问作者Michael Qiao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 07:27:07