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

SQLAlchemy如何使用LIKE查询ARRAY列中任意元素匹配通配符的记录

问题原因

你现有写法生成的SQL逻辑完全倒置:'abc%' LIKE ANY(file.names)的语义是将数组中的每个元素作为匹配模式,判断固定字符串abc%是否符合该模式,和你需要的「筛选数组中存在至少一个元素符合abc%通配规则」的需求相反,因此返回结果为空。

正确实现方案

原生SQL逻辑(兼容绝大多数支持数组类型的数据库)

通过EXISTS搭配unnest拆解数组后逐行匹配是兼容性最好、性能稳定的写法,以PostgreSQL为例:

SELECT file.id, file.names 
FROM file 
WHERE EXISTS (
    SELECT 1 FROM unnest(file.names) AS name
    WHERE name LIKE 'abc%'
);

对应的SQLAlchemy查询写法

from sqlalchemy import func, select

# 构造子查询:拆解names数组,判断是否存在符合通配规则的元素
match_subquery = select(
    func.unnest(File.names).label("name")
).where(
    func.name.like("abc%")
).exists()

# 执行查询
result = File.query.where(match_subquery).all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:02