过滤flask / sqlalchemy

时间:2017-04-24 23:42:54

标签: python flask sqlalchemy

我是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数据库中选择一行。

非常感谢任何帮助!

0 个答案:

没有答案