【问题标题】:How to redirect to page if "E11000 duplicate key error" when inserting duplicates using Python使用 Python 插入重复项时,如果出现“E11000 重复键错误”,如何重定向到页面
【发布时间】:2019-02-24 04:03:01
【问题描述】:

我正在使用 Python、Pymongo 和 Flask 做一个简单的食谱项目。我在 MongoDB 中有一个现有的食谱集合。我对其进行了编码,以便我可以单独查看这些食谱并单击一个按钮,该按钮会将食谱保存到我的 saved_recipe 集合中。如果我查看相同的配方并再次保存它,我显然会收到“E11000 重复键错误”,因为集合中已经存在 _id(ObjectId)(见下图)。

我希望在同一屏幕上弹出一个窗口,告诉用户他们已经将该食谱添加到他们的“已保存食谱”文件夹中,或者只是通过渲染一个模板来重定向他们,说明他们已经拥有该食谱,大意是这样。

这可能吗?

我在想一些事情:

if ObjectId == ObjectId
    return render_template('error.html')

这是我的代码来帮助解释:

recipe_id = recipes.find_one({"_id": ObjectId(recipe_id)})
    savedrecipe.insert_one(recipe_id)
    if 'username' in session:
        return redirect(url_for('saved_recipes'))
    return redirect(url_for('login'))

所以,我在我的数据库的集合中找到了一个特定的 _id。然后我将找到的 id 插入到不同的集合中。如果我尝试将相同的 id 添加到同一个集合中,我会收到“重复错误”。有没有办法找到我上面的 id,然后将其插入我想要的集合中,但为它创建一个新的 id?

【问题讨论】:

    标签: python mongodb flask pymongo


    【解决方案1】:

    您可以在保存配方时使用 try/except 块。像这样的:

    try:
        recipe.save()
    except DuplicateKeyError:
        return render_template('error.html')
    

    显然这遗漏了很多细节,但这是大意。

    【讨论】:

    • 仅用于 except 参数 - 我如何定义“DuplicateKeyError”是什么?如果我可以将该变量定义为错误页面,我将被排序,但我不知道如何。
    • 根据你的截图,确切的错误是pymongo.errors.DuplicateKeyError
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 2013-04-14
    • 2014-02-02
    • 2017-02-20
    • 2017-08-27
    • 2021-06-04
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多