SQLAlchemy中与SQL "LIKE"语句等效的用法
有一个名为 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()
它继承了一些数据库功能,比如CONTAINS和MATCH。不过,这些功能在SQLite中是用不了的。
想了解更多信息,可以去看看 常用过滤操作符
271
每一列都有一个叫做 like()
的方法,可以在 query.filter()
中使用。当你有一个搜索字符串时,可以在字符串的两边加上一个 %
符号,这样就可以在两个方向上作为子字符串进行搜索。
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()