我是flask / sqlalchemy的新手,当我的配方数据库中的资源已经存在时,我一直在尝试使用过滤器来拒绝POST事件。
所以我想检查一下,对于给定用户( id ), recipename 是否已经存在。我是这样做的:
exists = db.session.query(Recipe).filter_by(rname=recipename, id=id).scalar()
这似乎不起作用,但如果你按照我的调试应该是这样的:
在我的代码中,我把它分解了,并且我提出了以下几行:
print '1', db.session.query(Recipe).filter_by(id=id).scalar()
print '2', db.session.query(Recipe).filter_by(rname=recipename).scalar()
print '3', db.session.query(Recipe).filter_by(rname=recipename, id=id).scalar()
使用rname = test:
进行第一次POST尝试1 <__main__.Recipe object at 0x103cff490>
2 None
3 None
这是有道理的,因为只有用户ID应该返回非零响应,因为配方尚未发布。
使用rname = test:
进行第二次POST尝试1 <__main__.Recipe object at 0x103cff350>
2 <__main__.Recipe object at 0x103cff390>
3 None
正如预期的那样,(1)和(2)不是None,因为rname = test现在也存在。但为什么(3)仍然没有返回?
当我从.scalar()中删除打印语句3时,查询看起来是正确的:
SELECT recipes.id AS recipes_id, recipes.rname AS recipes_rname, recipes.customer_id AS recipes_customer_id, recipes.date AS recipes_date, recipes.done AS recipes_done
FROM recipes
WHERE recipes.rname = :rname_1 AND recipes.id = :id_1
我也可以从我的postgres数据库中选择一行。
非常感谢任何帮助!