2014-10-03 66 views
24

如何將以下mysql查詢轉換爲sqlalchemy?如何在sqlalchemy ORM查詢中使用NOT IN子句

SELECT * FROM `table_a` ta, `table_b` tb where 1 
AND ta.id = tb.id 
AND ta.id not in (select id from `table_c`) 

到目前爲止,我有這樣的SQLAlchemy的:

query = session.query(table_a, table_b) 
query = query.filter(table_a.id == table_b.id) 

回答

41

試試這個:

subquery = session.query(table_c.id) 
query = query.filter(~table_a.id.in_(subquery)) 

注:table_atable_btable_c應當映射類,而不是Table實例。

+0

你好。在這個例子中,我如何加入table_a和table_b? – nuttynibbles 2014-10-03 15:57:06

+0

我假設'query'是你上面顯示的查詢對象。 – 2014-10-03 16:07:12

+0

哦,好了,現在我明白了。最初我迷路了,因爲我認爲這個例子不適合連接表。 – nuttynibbles 2014-10-03 16:14:10

9

這裏是全碼:

#join table_a and table_b 
query = session.query(table_a, table_b) 
query = query.filter(table_a.id == table_b.id) 

# create subquery 
subquery = session.query(table_c.id) 
# select all from table_a not in subquery 
query = query.filter(~table_a.id.in_(subquery))