SQLAlchemy:按成员列表中的对象进行筛选



考虑以下类,

class Person:
id
name
jobs
class Job:
name
person
person_id (FK)

其中Person.jobs是指类Job对象。现在我想执行以下查询,

# for a given person p
Job.query.filter(Job.notin_(p.jobs))

SQLAlchemy中可能吗?

请不要说我不想写Job.query.filter(Job.person_id != p.id).

不!

正如有关in_的文档所解释的那样,从SQLAlchemy的1.2版本开始,您不能拥有对象的实例列表,只能:

  • 身份证件列表
  • 空列表
  • 选择
  • 绑定参数

从 1.2 版开始,只有您描述为"不想要"的才是正确答案:

Job.query.filter(Job.id.notin_([j.id for j in person.jobs]))

最新更新