1

I need filter using not in but in two fields.

q = db_session.query(Necessidade, WFLeilao, BidHeader, BidItemPrice, func.sbprecobruto(BidItemPrice.bid_number,BidItemPrice.line_number, Necessidade.identportal, type_=Float))
q = q.join(WFLeilao, and_(Necessidade.numeroportal == WFLeilao.leilao, Necessidade.numeroitemportal == WFLeilao.itemleilao))    
q = q.join(BidHeader, and_(BidHeader.bid_number == BidItemPrice.bid_number))    
q = q.join(BidItemPrice, and_(BidItemPrice.auction_header_id == WFLeilao.leilao, BidItemPrice.auction_line_number == WFLeilao.itemleilao, BidItemPrice.bid_number == WFLeilao.lance, BidItemPrice.line_number == WFLeilao.itemlance))    

subquery = db_session.query(ItfRetornoPedido.num_leilao_superbuy, ItfRetornoPedido.num_item_leilao_superbuy).filter_by(status_comprador=1).filter_by(acao='I').filter_by(empresa='NK').subquery()

q = q.filter(~(WFLeilao.leilao,Wfleilao.itemleilao).in_(subquery))

In oracle is possible, a similar example:

 Select *
  from table_a
 where (leilao, itemleilao) not in
       (Select num_leilao_superbuy, num_item_leilao_superbuy
          from table_b 
         where empresa = 'NK')

Is it possible?

2 Answers 2

2

I found a solution using tuple_

q = q.filter(~tuple_(WFLeilao.leilao, WFLeilao.itemleilao).in_(subquery))
Sign up to request clarification or add additional context in comments.

Comments

1

you can chain the query:

q = q.filter(~(WFLeilao.leilao.in_(subquery))) \
     .filter(~(Wfleilao.itemleilao.in_(subquery)))

3 Comments

Thank you. But I think that using tuple is better
Not just better, resulting SQL is semantically very different.
Yes! I mean tuple_ worked for me and it was exactly I needed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.