查询以检查SQLAlchemy中集合的大小是0还是空?

Joh*_*ton 7 python sqlalchemy flask

Person有一个Building.

Person 有很多 Group

我想要people从他们收藏中building没有任何人的所有人那里归还.也许我可以搜索拥有长度为0的组列表的人?就像是: Groupgroups

unassigned=Person.query.filter(Person.building==g.current_building,Person.groups.any()).all()
Run Code Online (Sandbox Code Playgroud)

van*_*van 15

使用negation(~)any:

q = session.query(Person)
q = q.filter(Person.building == g.current_building)
q = q.filter(~Person.groups.any())
Run Code Online (Sandbox Code Playgroud)

any 在你的情况下比你需要的更强大,但它会很好地完成工作.

  • 这是“昂贵”的,因为任何力量吗? (2认同)
  • 我不认为它会很昂贵,但经常是这样:这取决于:它可能比其他解决方案更快或更慢,这取决于您的数据密度,当前数据库索引以及RDBMS本身。尽管any会生成一个子查询,因此它不是SQL的“不错”部分,但这是SA对用户隐藏的内容。 (2认同)
  • 在5Gb sqlite数据库上,使用外部联接的速度比使用any()快100倍(我没有等到any()版本完成): .id).outerjoin(Sentence).filter(Sentence.id == None)` (2认同)