我正在尝试构建一个查询,该查询返回所有具有符合指定条件的子项的对象。诀窍是有多个互相排斥的标准,因此必须有多个孩子。我不确定如何表达这一点。
型号:
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")
我希望获取正在发送给定义的一组用户的所有消息。例如,我想要返回发送给用户1
和2
的所有邮件,但不会返回仅发送给用户1
的邮件或仅发送给用户2
的邮件。它必须已发送给两个用户!
我正在尝试如下查询:
query = Message.query.filter(Message.recipients.any(MessageRecipient.recipient_id.in_([1,2])))
上述情况不起作用,因为in_
是分离的。它确实返回了我想要的消息,但它也返回了我不想想要的消息。
有没有人知道我如何构建一个查询,要求Message
MessageRecipients
具有任意一组ID?
答案 0 :(得分:0)
我通过迭代集合中的所有对象并使用exists()
为每个对象创建一个新的子查询来解决这个问题。不确定这是否是最有效的方式,但它确实有效。
for recipient in [1,2]:
query = query.filter(MessageRecipient.query.filter(and_(MessageRecipient.recipient_id== recipient,
MessageRecipient.message_id == Message.uid)).exists())