我想通过匹配名字和姓氏字段来搜索用户。
在纯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}不相容有关运营商。
任何提示?
由于
答案 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
之类的事情,但我不确定。