[英]PeeWee: Ignores foreign key constraint
Job.select().where(Job.user == current_user.id and Job.status == "Running")
不断从错误的用户返回错误的行。 似乎完全忽略了语句Job.user == current_user.id
。
我也试过
Job.select().join(User).where(Job.status == "Running")
同样,它不会返回属于当前用户的正确Job。
这里的问题是, and
没有转化为SQL AND
。
实际上,它在任何库中都无法做到这一点。 and
运算符不能重载,如果第一个不正确,它将短路(不评估第二个参数),并且它始终返回所评估的最后一个东西。
因此,由于Job.user == current_user.id
返回一个非空查询对象,这是事实, Job.user == current_user.id and Job.status == "Running"
返回Job.status == "Running"
。 这就是为什么它忽略了current_user.id
。
如文档所述,使用&
运算符或bin_and
方法。
另外,请记住, &
的优先级与and
优先级不同,因此在每次比较时都需要加括号。
对于您的第二次尝试,该join
工作正常-只是意味着Job
中的每一行都与User
相应行中的列相连。 您甚至都没有试图告诉它要限制它的用户,并且它无法读懂您的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.