[英]SQLAlchemy join a "one to many table" and then filter on the joined table with a set of values
我有一个带有标签的条目模型,所以每个条目都可以有很多标签。 标签是一个带有标签值的模型,它是标签字符串。 我正在尝试在标签集上过滤我返回的条目。 例如,给定两个标签 a 和 b,我只想返回同时具有标签 a 和标签 b 的条目。
现在我有 OR,从某种意义上说,我可以返回具有 a 或 b 的任何条目,并且我已经这样做了。
entObjs = Entries.query.join(Entries.tags).filter(Tags.tag.in_(tagList)).all()
tagList 是一个字符串列表。 我如何实现 AND,所以我只得到包含所有标签的条目?
我使用别名表和连接做了类似的事情,
from sqlalchemy.orm import aliased
def test(self, tags):
q = self.session.query(models.Item).\
join(models.ItemTag).\
join(models.Tag.\
filter(models.Tag.name == tags[0])
i = 0
for tag in tags[1:]:
alias1 = aliased(models.Tag)
alias2 = aliased(models.ItemTag)
q = q.join(alias2, models.Item.id == alias2.item_id).\
filter(alias1.id == alias2.tag_id).\
filter(alias1.name == tag)
i += 1
print(str(q))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.