2017-05-04 56 views
0

我試圖建立一個查詢它返回有孩子符合指定條件的所有對象。訣竅是有多個相互排斥的標準,所以必須有多個孩子。我不知道如何表達這一點。SQLAlchemy的不同的孩子必須存在

型號:

class Message(Base): 
    __tablename__ = 'Message' 


class MessageRecipient(Base): 
    __tablename__ = 'MessageRecipient' 

    recipient_id = Column(Integer, ForeignKey('User.uid')) 
    message_id = Column(Integer, ForeignKey('Message.uid')) 

    user = relationship('User', backref="messages_received") 
    message = relationship('Message', backref="recipients") 

我想這正被送往定義的一組用戶的所有郵件。例如,我想返回發送給用戶12,但不僅僅是發送給用戶1或消息的消息只發送給用戶2所有消息。它必須已經發送給兩個用戶!

我試圖查詢類似如下:

query = Message.query.filter(Message.recipients.any(MessageRecipient.recipient_id.in_([1,2]))) 

上述不起作用,因爲in_是分離性的。它不會返回我想要的消息,但它也返回的消息我想。

有沒有人有我如何建立一個查詢,這需要MessageMessageRecipients一個任意設置的ID的想法?

回答

0

我通過遍歷所有對象的集合中,併爲每個使用exists()創建一個新的子查詢解決了這個。不知道這是否是最有效的方式,但它有效。

for recipient in [1,2]: 
     query = query.filter(MessageRecipient.query.filter(and_(MessageRecipient.recipient_id== recipient, 
                   MessageRecipient.message_id == Message.uid)).exists()) 
相關問題