2015-04-29 186 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。因此在我的情況下,括號不是必需的。