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

在普通的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一起使用是可行的,因此我推断我的问题与ilikeor运算符不兼容有关。

有什么提示吗?

谢谢

最佳答案

您不能以这种方式将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/

10-12 07:11