在SQLAlchemy过滤器表达式中执行“ilike或ilike”时的TypeError

时间:2013-08-23 16:01:29

标签: python sqlalchemy

我想通过匹配名字和姓氏字段来搜索用户。

在纯SQL中我会这样做:

SELECT * FROM user
WHERE (first_name ILIKE 'pattern') OR (last_name LIKE 'pattern');

我正在使用SQLAlchemy尝试以下内容:

User.query().filter(User.last_name.ilike(pattern) \
                    or User.first_name.ilike(pattern))

我收到以下错误:TypeError: Boolean value of this clause is not defined

在相同的上下文中,将两个完全匹配(==)合并到or会有效,因此我推断我的问题与ilike与{{1}不相容有关运营商。

任何提示?

由于

1 个答案:

答案 0 :(得分:1)

您不能以这种方式使用or与SQLAlchemy。它有自己的or_功能:

query.filter(or_(expr1, expr2))

具体来说:

User.query().filter(or_(User.last_name.ilike(pattern),
                        User.first_name.ilike(pattern)))

and_not_in_(可能更多)也是如此。我认为你可以做expr1 | expr2之类的事情,但我不确定。