考虑以下类,
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]))