2013-08-23 3 views
1

Я хочу искать пользователей, сопоставляя их как с именами, так и с именами.TypeError при выполнении «ilike or ilike» в выражении фильтра 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, являющейся чем-то ow несовместимо с оператором or.

Любые подсказки?

Благодаря

+0

Возможный дубликат http://stackoverflow.com/questions/7942547/using-or-in-sqlalchemy? –

ответ

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_ (и, возможно, более). I думаю вы можете сделать что-то вроде expr1 | expr2, но я не уверен.

Смежные вопросы