Python、SqlAlchemy:多对多关系,找到那些没有

Python、SqlAlchemy:多对多关系,找到那些没有,python,sql,database-design,sqlalchemy,pylons,Python,Sql,Database Design,Sqlalchemy,Pylons,假设我有两种类型的对象,Movies和Tags,由a中的关联表关联,关联表由secondary参数指向relationship(),我希望能够找到,比如说,没有标记的所有电影?我将运行什么样的查询来实现这种效果?如果TagId是Movies对象的一部分,这将是检查Movies上的TagId是否为null的简单示例: session.query(Movies).filter(Movies.TagId == None).all() 但您的多对多评论建议使用MoviesTags链接实体,因此它

假设我有两种类型的对象,
Movies
Tags
,由a中的关联表关联,关联表由
secondary
参数指向
relationship()
,我希望能够找到,比如说,没有
标记的所有
电影
?我将运行什么样的查询来实现这种效果?

如果TagId是Movies对象的一部分,这将是检查Movies上的TagId是否为null的简单示例:

session.query(Movies).filter(Movies.TagId == None).all()   
但您的多对多评论建议使用MoviesTags链接实体,因此它更复杂,需要使用左外连接链接到MoviesTags

还有类似的SQL查询。你基本上想要以以下方式结束:

select Movies.name from Movies 
left outer join MoviesTags on Movies.MovieId = MoviesTags.MovieId 
where MoviesTags.TagId is null
使用,这对于此类查询特别有用

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

这里的
tags
tags

的多对多关系名称,除非我读错了,否则似乎表明“==None”构造也将为多对多生成一个notexists子句?是的,不能遵循您的第一个建议。我在电影表中没有TagId,因为它是多对多的。我将考虑采纳你的第二个建议。