2014-10-03 13 views

Trả lời

41

Hãy thử điều này:

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

Lưu ý: table_a, table_btable_c nên được ánh xạ lớp học, không Table trường.

+0

Xin chào. làm thế nào để tôi tham gia table_a và table_b trong ví dụ này? – nuttynibbles

+0

Tôi giả định rằng 'truy vấn' là đối tượng truy vấn mà bạn đã trình bày ở trên. –

+0

ohh ok bây giờ tôi nhận được nó. ban đầu tôi đã bị mất vì tôi nghĩ rằng ví dụ không phải là để tham gia bàn. – nuttynibbles

9

đây là mã đầy đủ:

#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)) 
7

Các internals ORM mô tả các nhà điều hành notin_(), vì vậy bạn có thể nói:

query = query.filter(table_a.id.notin_(subquery)) 
#        ^^^^^^ 

Từ các tài liệu:

thừa hưởng từ notin_() phương thức ColumnOperators

triển khai toán tử NOT IN.

Điều này tương đương với việc sử dụng phủ định với ColumnOperators.in_(), tức là ~x.in_(y).

Các vấn đề liên quan