我想通过匹配名字和姓氏字段来搜索用户。
在普通的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
与or
运算符不兼容有关。有什么提示吗?
谢谢
最佳答案
您不能以这种方式将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
的操作,但是我不确定。关于python - 在SQLAlchemy过滤器表达式中执行“ilike或ilike”时发生TypeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18407173/