如何在 sqlalchemy 中执行 LIKE 查询?

Posted

技术标签:

【中文标题】如何在 sqlalchemy 中执行 LIKE 查询?【英文标题】:how to execute LIKE query in sqlalchemy? 【发布时间】:2014-07-18 10:04:27 【问题描述】:

我正在使用sqlalchemy 从表中获取数据。 现在从名为audit_trail_table 的表中获取所有记录正在按预期工作。

select_stmt = select([self.audit_trail_table]).where(self.audit_trail_table.c.id == int(id))
row = conn.execute(select_stmt).fetchone()

现在我希望在多个列上执行LIKE 查询,如下所示:

filter_query = #(some value which will work as a filter_query while fetching )records
filter_stmt = select([self.audit_trail_table]).where(self.audit_trail_table.c.first_name like '%' + filter_query + '%' or self.audit_trail_table.c.last_name like '%')

但它在 LIKE 处给出错误。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用like 运算符:

select([self.audit_trail_table]).where(
    self.audit_trail_table.c.first_name.like('%' + filter_query + '%') or 
    self.audit_trail_table.c.last_name.like('%abc%')
)

【讨论】:

它适用于单个like()。但是当我将两个like() 函数与or 组合为:TypeError: Boolean value of this clause is not defined 时出现错误 你必须使用 django 的 OR 运算符而不是 python 的 OR 运算符 是的。我使用了来自 sqlalchemy 的or_()。非常感谢您的帮助! 你也可以用contains代替like @RedBaron 这应该是一个答案,而不是隐藏在 cmets 部分!

以上是关于如何在 sqlalchemy 中执行 LIKE 查询?的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy 创建 增 删 改 查

使用sqlalchemy对mysql进行增删改查

SQLAlchemy query with OR/AND/like common filters

sqlalchemy 过滤多列

PHP查询mysql的时候用了like和LIMIT分页,如何获得未分页但是like了的总数据量

Sqlalchemy