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

Flask Python应用中SQL LIKE语句绑定变量的问题求助

解决Flask中SQL LIKE参数化查询返回空的问题

你的问题出在错误地给参数占位符加了单引号,同时没必要混合f-string和参数化查询,导致数据库把:text当成了字面字符串而非参数占位符,自然查不到数据。

直接用以下两种正确写法之一即可:

方法1:将通配符拼在参数值中(推荐,跨数据库通用)

rows = cursor.execute("SELECT * FROM vragen WHERE vraag LIKE :text", {"text": '%' + query + '%'}).fetchall()

注意这里的SQL语句里,:text不需要加任何引号,参数化查询会自动处理字符串的转义和引号包裹。

方法2:在SQL语句中拼接通配符(需适配数据库语法)

  • 适用于SQLite/PostgreSQL:
rows = cursor.execute("SELECT * FROM vragen WHERE vraag LIKE '%' || :text || '%'", {"text": query}).fetchall()
  • 适用于MySQL:
rows = cursor.execute("SELECT * FROM vragen WHERE vraag LIKE CONCAT('%', :text, '%')", {"text": query}).fetchall()

为什么原来的代码无效?

你之前的代码里,f"SELECT * FROM vragen WHERE vraag LIKE ':text'"会把:text作为字符串字面量传给数据库,相当于执行了SELECT * FROM vragen WHERE vraag LIKE ':text',自然找不到匹配的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:05:24