如何在MySQL逗号分隔字段中查询精确匹配的指定字符串,含SQLAlchemy实现
解决方案
核心逻辑
要匹配逗号分隔字符串中的独立元素,只需给字段值前后统一拼接逗号,再匹配,目标值,格式的子串即可,完美覆盖目标值出现在字段开头、中间、结尾的所有场景,同时排除子串匹配的情况。
SQLAlchemy 实现方案
首先导入SQLAlchemy的func方法:
from sqlalchemy import func # 假设你的表对应的ORM模型为AuthorModel,根据实际替换为自己的模型类 result = db.session.query(AuthorModel).filter( func.concat(',', AuthorModel.co_authors, ',').like('%,jeff,%') ).all()
如果你的数据中存在合作者名前后带空格的情况(比如beth, jeff, ben这类格式),可以先去除空格再匹配:
result = db.session.query(AuthorModel).filter( func.concat(',', func.replace(AuthorModel.co_authors, ' ', ''), ',').like('%,jeff,%') ).all()
如果需要大小写不敏感匹配(同时兼容Jeff、JEFF、jeff等写法),把like替换为ilike即可。
原生SQL参考
-- 基础版本 SELECT * FROM 你的表名 WHERE CONCAT(',', co_authors, ',') LIKE '%,jeff,%'; -- 带空格适配的版本 SELECT * FROM 你的表名 WHERE CONCAT(',', REPLACE(co_authors, ' ', ''), ',') LIKE '%,jeff,%';
内容的提问来源于stack exchange,提问作者Charlie Keegan
相关产品推荐
相关产品推荐

