SQLAlchemy中与SQL "LIKE"语句等效的用法

132 投票
12 回答
193049 浏览
提问于 2025-04-16 01:46

有一个名为 A 的列,里面的值像是“苹果 香蕉 橙子”和“草莓 香蕉 柠檬”。我想找到一个 SQLAlchemy 的写法,来实现这个功能。

SELECT * FROM table WHERE tags LIKE "%banana%";

我应该在 Class.query.filter() 中传入什么来做到这一点呢?

12 个回答

15

如果你想要一个不区分大小写的 like 语句的实现方法:

session.query(TableName).filter(TableName.colName.ilike(f'%{search_text}%')).all()
16

补充一下上面的回答,如果你在找解决方案,可以试试用'match'操作符,代替'like'。我不是偏袒,但在Postgresql中,这个方法对我来说效果很好。

Note.query.filter(Note.message.match("%somestr%")).all()

它继承了一些数据库功能,比如CONTAINSMATCH。不过,这些功能在SQLite中是用不了的。

想了解更多信息,可以去看看 常用过滤操作符

271

每一列都有一个叫做 like() 的方法,可以在 query.filter() 中使用。当你有一个搜索字符串时,可以在字符串的两边加上一个 % 符号,这样就可以在两个方向上作为子字符串进行搜索。

tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()

撰写回答