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_是分析的。它确实返回了我想要的消息,但也返回消息i not 想要。

有人知道我如何构建需要Message具有带有任意ID的MessageRecipients的查询?

我通过在集合中的所有对象上迭代并使用exists()为每个对象创建一个新子查询来解决此问题。不确定这是否是最有效的方法,但它起作用。

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

最新更新