Python SQLAlchemy:返回由两个给定记录共享的相关记录列表

Python SQLAlchemy:返回由两个给定记录共享的相关记录列表,python,sql,python-2.7,sqlalchemy,rdbms,Python,Sql,Python 2.7,Sqlalchemy,Rdbms,想知道是否/如何使用SQLAlchemy返回两篇博客文章之间共享的标签列表,或者是否需要分别提取每个标签并在Python端进行比较。就拿以下例子来说: 将在列表中返回每个贴有标签的笑话,但我不知道如何找到两篇帖子之间共享的标签列表,而不只是从标签表开始。任何帮助都将不胜感激 这对我很有用: from sqlalchemy.sql import exists, and_ pt1 = exists().where(and_(PostTag.tag_id == Tag.id, PostTag.pos

想知道是否/如何使用SQLAlchemy返回两篇博客文章之间共享的标签列表,或者是否需要分别提取每个标签并在Python端进行比较。就拿以下例子来说:

将在列表中返回每个贴有标签的笑话,但我不知道如何找到两篇帖子之间共享的标签列表,而不只是从标签表开始。任何帮助都将不胜感激

这对我很有用:

from sqlalchemy.sql import exists, and_

pt1 = exists().where(and_(PostTag.tag_id == Tag.id, PostTag.post_id == id1))
pt2 = exists().where(and_(PostTag.tag_id == Tag.id, PostTag.post_id == id2))
tags = session.query(Tag.name).filter(pt1, pt2).all()
应生成类似以下内容的SQL:

SELECT name FROM tags
WHERE EXISTS(SELECT 1 FROM post_tags WHERE tag_id=id AND post_id=<post id 1>)
AND EXISTS(SELECT 1 FROM post_tags WHERE tag_id=id AND post_id=<post id 2>)

这很有效,谢谢!你知道为什么我不能只做pt1=exists.wherend_PostTag.tag==tag,PostTag.post==post1,其中post1是SQLAlchemy ORM对象格式的post对象吗?它抛出AttributeError:type对象“Tag”没有属性“\u sa\u instance\u state”PostTag.Tag==Tag-您正在将一个标记实例与标记模型类进行比较。我不确定如何从子查询访问标记实例。但是,您肯定能够做到这一点:pt1=exists.wherend\u PostTag.tag\u id==tag.id,PostTag.post==post1
from sqlalchemy.sql import exists, and_

pt1 = exists().where(and_(PostTag.tag_id == Tag.id, PostTag.post_id == id1))
pt2 = exists().where(and_(PostTag.tag_id == Tag.id, PostTag.post_id == id2))
tags = session.query(Tag.name).filter(pt1, pt2).all()
SELECT name FROM tags
WHERE EXISTS(SELECT 1 FROM post_tags WHERE tag_id=id AND post_id=<post id 1>)
AND EXISTS(SELECT 1 FROM post_tags WHERE tag_id=id AND post_id=<post id 2>)