SQLAlchemy 等效于 SQL“ LIKE”语句

标签列的值包括“苹果、香蕉、橙子”和“草莓、香蕉、柠檬”。我想找到 SQLAlchemy 的等效语句

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

我应该传递什么给 Class.query.filter()来做这件事?

156696 次浏览

每列都有 like()方法,可以在 query.filter()中使用。给定一个搜索字符串,在两边添加一个 %字符,作为两个方向的子字符串进行搜索。

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

添加上述答案,无论谁寻找解决方案,您也可以尝试’匹配’运算符,而不是’喜欢’。我不想带有偏见,但在 Postgresql,这对我非常有效。

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

它继承了诸如 包含匹配之类的数据库函数,但是在 SQLite 中不可用。

更多信息请访问 常用的过滤运算符

试试这个代码:

output = dbsession.query(<model_class>).filter(
<model_class>.email.ilike("%" + <email> + "%")
)

Using PostgreSQL like (见上面已接受的答案) somehow didn't work for me 虽然病例吻合, but ilike (case insensisitive 喜欢) does.

如果使用本机 sql,可以引用我的代码,否则就忽略我的答案。

SELECT * FROM table WHERE tags LIKE "%banana%";
from sqlalchemy import text


bar_tags = "banana"


# '%' attention to spaces
query_sql = """SELECT * FROM table WHERE tags LIKE '%' :bar_tags '%'"""


# db is sqlalchemy session object
tags_res_list = db.execute(text(query_sql), {"bar_tags": bar_tags}).fetchall()


如果您希望像子句实现那样不区分大小写:

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

在 SQLAlchemy 1.4/2.0中:

q = session.query(User).filter(User.name.like('e%'))


像这样做对我(Oracle)作为本机 sql 很有用

"SELECT * FROM table WHERE tags LIKE '%' || :bar_tags || '%' "