2013-03-05 2 views
2

мне нужно сделать этот запрос:sqlalchemy как использовать AND в OR операции?

SELECT * 
FROM tbl_member 
WHERE (member_type==1 AND member_status==1) 
    OR (member_type==2 and member_status==2) 

Я пробовал:

q=session.query(tbl_member) \ 
    .filter(or_(and_(tbl_member.member_type==1,tbl_member.member_status==1), \ 
       and_(tbl_member.member_type==2,tbl_member.member_status==2))) 

и

q=session.query(tbl_member) \ 
    .filter(or_((and_(tbl_member.member_type==1,tbl_member.member_status==1)), \ 
       (and_(tbl_member.member_type==2,tbl_member.member_status==2)))) 

SQL-запрос еще так:

SELECT * 
FROM tbl_member 
WHERE member_type==1 AND member_status==1 OR member_type==2 AND member_status==2 

Как мне это сделать?

ответ

4

Запрос семантически тот же потому, что AND имеет приоритет над OR, поэтому
WHERE Cond1 AND Cond2 OR Cond3 AND Cond4 будет производить один и тот же результат, как
WHERE (Cond1 AND Cond2) OR (Cond3 AND Cond4).

Вы должны были попробовать обратный путь (переключатель or_ и and_ в вашем коде), вы заметили бы, что sqlalchemy действительно генерирует скобки.

+0

Я думаю, что «WHERE Cond1 AND Cond2 OR Cond3 AND Cond4» и «WHERE (Cond1 AND Cond2) OR (Cond3 AND Cond4)» должны быть не одинаковыми. –

+0

Извините, вы правы, я тестировал в базе данных mysql. это тот же результат. –