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")
同样,它不会返回属于当前用户的正确作业。
答案 0 :(得分:2)
此处的问题是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
方法,如the docs所述。
另外,请记住&
与and
的优先级不同,因此每次比较都需要parens。
至于您的第二次尝试,join
工作正常 - 这只意味着Job
中的每一行都与User
中相应行的列相关联。你甚至都试图告诉它你想要限制它的用户,而且它无法读懂你的想法。