PeeWee:忽略外键约束

时间:2014-09-11 04:27:00

标签: python sql flask peewee

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")

同样,它不会返回属于当前用户的正确作业。

1 个答案:

答案 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中相应行的列相关联。你甚至都试图告诉它你想要限制它的用户,而且它无法读懂你的想法。