2015-04-29 101 views
1

我正试图在sqlalchemy核心中产生下面的sql。我无法获得连词AND或括号中的括号。SQLAlchemy与圆括号连接

,我使用
select from member t1 
inner join member t2 
on (
     (
      t1.first_name = t2.last_name and 
      t1.last_name = t2.first_name and 
      t1.dob = t2.dob 
     ) 
     or (
      t1.last_name = t2.last_name and 
      t1.first_name = t2.first_name and 
      t1.dob = t2.dob 
      ) 
    ) 
group by t2.id 

的SQLAlchemy的核心语句是:

selStmt = select([t1]).select_from(
    t1.join(
      t2, or_(
        and_(
         t1.c.first_name == t2.c.last_name, 
         t1.c.last_name == t2.c.first_name, 
         t1.c.dob == t2.c.dob 
         ), 
        and_(
         t1.c.last_name == t2.c.last_name, 
         t1.c.first_name == t2.c.first_name, 
         t1.c.dob == t2.c.dob 
         ) 
        ) 
      ) 
     ).group_by(t2.c.id) 

产生的SQL代码:

SELECT t1 
    FROM t1 
    JOIN t2 ON 
     t1.first_name = t2.last_name AND 
     t1.last_name = t2.first_name AND 
     t1.dob = t2.dob OR 
     t1.last_name = t2.last_name AND 
     t1.first_name = t2.first_name AND 
     t1.dob = t2.dob 
    GROUP BY t2.id 

由于括号中不包含的逻辑是不正确的。我如何在连词中得到括号?

+0

逻辑正确,'和'具有比'或'更高的优先级。 – van

回答

1

显然,AND操作的优先级高于OR。因此在我的情况下,括号不是必需的。