我有一個項目和標籤m2m關係。我希望能夠創建一個動態AND查詢來獲取每個列出標籤的項目。SQLalchemy + Flask:動態AND查詢
這是一個工作示例,但我希望它是動態的(隨機數量的標籤)。
return Item.query.filter(Item.item_tag.any(name = 'test'))\
.filter(Item.item_tag.any(name = 'tag'))\
.filter(Item.item_tag.any(name = 'tag1'))\
.filter(Item.item_tag.any(name = 'tag2'))\
.all()
這是or_工作示例:
tags = or_(*[Tag.name==x for x in tags])
return Item.query.join(Tag.items).filter(tags).all()
我正在尋找一個類似的東西。
編輯:對工作和解決方案生成的SQL是:
SELECT item.id AS item_id, item.title AS item_title, item.url AS item_url, item.body AS item_body, item.itempic AS item_itempic, item.time_published AS item_time_published, item.private AS item_private, item.user_id AS item_user_id FROM item WHERE (EXISTS (SELECT 1 FROM item_tag, tag WHERE item.id = item_tag.item_id AND tag.id = item_tag.tag_id AND tag.name = ?)) AND (EXISTS (SELECT 1 FROM item_tag, tag WHERE item.id = item_tag.item_id AND tag.id = item_tag.tag_id AND tag.name = ?))
EDIT2:什麼,我需要
例:項目1具有標籤:標籤1,標籤2,標籤3。 Item2具有標籤:tag1,tag2,tag3,tag4。
當搜索標籤:tag1,tag2,tag3。 item1和item2都被返回。在搜索標籤時:tag1,tag2,tag3,tag4。只有item2被返回。
當我使用該查詢時,它會嘗試查找具有多個名稱的標籤(我認爲)。 這是該查詢生成的SQL: SELECT item.id AS ITEM_ID,item.title AS ITEM_TITLE,item.url AS item_url,item.body AS item_body,item.itempic AS item_itempic,item.time_published AS item_time_published ,item.private AS item_private,item.user_id AS item_user_id FROM標籤JOIN item_tag AS item_tag_1 ON tag.id = item_tag_1.tag_id JOIN item ON item.id = item_tag_1.item_id WHERE tag.name =? AND tag.name =? – cancerballs 2013-04-10 18:10:10