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

在Django中执行含ILIKE子句的原生SQL查询遇问题求助

Django原生SQL中ILIKE子句的正确执行写法

针对Django原生SQL里的ILIKE模糊查询,推荐两种可靠的写法:

方法1:在参数中拼接通配符(推荐)

直接把通配符%和搜索值组合后作为参数传入,SQL语句仅保留占位符%s:

cursor.execute("SELECT cc.name FROM customer cc WHERE name ILIKE %s", ["%jan%"])

这种方式由Django自动处理参数的引号和转义,既避免了语法错误,也能有效防止SQL注入。

方法2:在SQL语句中使用转义的通配符

如果需要在SQL里写通配符,要注意Python字符串中%%会被解析为单个%,同时确保参数用元组形式传入:

cursor.execute("SELECT cc.name FROM customer cc WHERE name ILIKE '%%%s%%'", ("jan",))

错误原因分析

你之前尝试的写法都存在语法冲突问题:

  • 写法'%%%s%%'搭配列表参数时,Python会先把%%转成%,再替换参数jan,最终SQL变成'%'jan'%',引号不匹配导致语法错误。
  • 直接写%%%s%%不加引号时,会生成%'jan'%'这类非法语法。
  • 仅用%s不添加通配符时,查询会变成精确匹配'jan',不符合模糊查询需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:10:30