Python,SqlAlchemy:很多关系,找不到那些

时间:2011-10-06 22:16:57

标签: python sql database-design sqlalchemy pylons

假设我有两种类型的对象,MoviesTags,与ORM中的many to many relationship相关联,并且secondary指示了一个关联表relationship()的参数,我希望能够找到所有Movies而不是Tags?我会运行什么样的查询来实现这种效果?

2 个答案:

答案 0 :(得分:2)

如果TagId是Movies对象的一部分,这将是检查电影上的TagId是否为空的简单情况:

session.query(Movies).filter(Movies.TagId == None).all()   

但你的多对多评论暗示了一个MoviesTags链接实体,所以它更棘手,并且涉及使用左外连接链接到MoviesTags。

a good guide to writing and debugging个类似的SQL查询。你基本上想要最终得到:

select Movies.name from Movies 
left outer join MoviesTags on Movies.MovieId = MoviesTags.MovieId 
where MoviesTags.TagId is null

答案 1 :(得分:2)

使用any(),这对此类查询特别有用。

query = session.query(Movies).filter(~Movies.tags.any())

此处tagsTags的多对多关系名称。