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,因为它是多对多的。我将考虑采纳你的第二个建议。