Python 如何在3个表上执行SQLAlchemy中的联接,其中一个表是其他两个表之间的映射?
假设我有以下表格:Python 如何在3个表上执行SQLAlchemy中的联接,其中一个表是其他两个表之间的映射?,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,假设我有以下表格: 文章带有字段文章id,标题 标记带有字段标记id,名称 ArticleTags带有字段article\u id,tag\u id 我希望找到所有具有给定标签的文章。如何在SQLAlchemy中创建这个复杂的连接 在SQL中,它看起来像: SELECT a.article_id, a.title FROM Articles AS a JOIN ArticleTags AS at ON a.article_id = at.article_id JOIN Tags
带有字段文章
,文章id
标题
带有字段标记
,标记id
名称
带有字段ArticleTags
,article\u id
tag\u id
SELECT a.article_id, a.title FROM Articles AS a
JOIN ArticleTags AS at ON a.article_id = at.article_id
JOIN Tags AS t ON at.tag_id = t.tag_id
WHERE t.name = 'tag_name'
我不知道如何在SQLAlchemy中做到这一点。我只将ArticleTags
用作“次要”表,我不知道如何将其包含在联接中
有人能帮忙吗
谢谢,Boda Cydo。假设您正确设置了ForeignKey约束并创建了映射器:
q = Session.query(Articles).filter(Articles.article_id == ArticleTags.article_id).\
filter(ArticleTags.tag_id == Tags.tag_id).\
filter(Tags.name == 'tag_name')
如果设置了多对多关系,则更简单:
q = Session.query(Articles).filter(Articles.tags.any(name = 'tag_name'))
有关博客相关查询的更多示例,请参见
如果使用sql表达式语言,它应该是可直接翻译的。看起来不错。但是有一个问题-我没有将
ArticleTags
映射到任何类。我只是在Articles
和Tags
映射类的第二个子句中使用ArticleTags
。我是否应该将ArticleTags
映射到一个类?如果这不起作用,您必须给出模型的相关部分。您的第二个解决方案可行,但我注意到它进行了子选择。子选择是否正常?