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

Flask中使用psycopg2向Postgres LIKE查询传字符串变量失败排查

问题原因与解决方法

你的LIKE查询语法不正确,问题出在变量传递时没有包含模糊匹配所需的通配符%。

为什么原来的代码返回空?

你直接执行的LIKE '%Abcd%'是查询包含"Abcd"的记录,但用参数传递时,你传入的tag = "Abcd"只会让SQL等价于:

SELECT * FROM database WHERE message LIKE 'Abcd' ESCAPE ''

这是精确匹配,只有当message字段完全等于"Abcd"时才会返回结果,而你的数据库里是包含该字符串的记录,所以返回空。

正确的写法有两种:

写法1:在变量中拼接通配符

直接给tag加上前后%,保持SQL语句不变:

tag = "%Abcd%"

conn = get_db_connection()
cur = conn.cursor()
cur.execute("SELECT * FROM database WHERE message LIKE %s ESCAPE ''", (tag,))
data = cur.fetchall()
cur.close()
conn.close()

写法2:在SQL语句中拼接通配符

如果不想修改tag变量,可以用Postgres的字符串拼接操作符||在SQL里组合通配符和变量:

tag = "Abcd"

conn = get_db_connection()
cur = conn.cursor()
cur.execute("SELECT * FROM database WHERE message LIKE '%' || %s || '%' ESCAPE ''", (tag,))
data = cur.fetchall()
cur.close()
conn.close()

注意事项

如果tag是用户输入的内容,要注意处理通配符转义(比如用户输入的字符串里包含%或_),不过你当前设置了ESCAPE '',意味着这些字符会被当作普通字符处理,如果你需要保留它们的通配符功能,可以去掉ESCAPE '',或者手动转义后再传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:30:59