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

为何出现sqlite3.ProgrammingError?Flask+SQLite3搜索排障

SQLite3 LIKE模糊匹配报错原因及修复

问题根源

你写的SQL语句中,LIKE "%?%"里的占位符?被双引号包裹,SQLite会将?识别为普通文本字符,而非需要绑定参数的占位符。这就导致数据库认为当前语句没有需要绑定的参数,但你却传入了1个参数(user_input,),最终触发sqlite3.ProgrammingError绑定数量不匹配的错误。

修复方案(两种安全写法,避免SQL注入)

方案1:在Python层拼接通配符后传入参数

data = c.execute('''SELECT * FROM job WHERE title LIKE ?''', (f'%{user_input}%',)).fetchall()

方案2:用SQLite字符串拼接符||拼接通配符

data = c.execute('''SELECT * FROM job WHERE title LIKE '%' || ? || '%' ''', (user_input,)).fetchall()

注意:绝对不要直接将用户输入拼接到SQL语句中(比如f"SELECT * FROM job WHERE title LIKE '%{user_input}%'"),这会引发严重的SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:02:04