使用Python插入重复项时,如果出现“ E11000重复键错误”,如何重定向到页面

时间:2019-02-20 19:51:24

标签: python mongodb flask pymongo

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

enter image description here

我希望要么在同一屏幕上弹出一个窗口,告诉用户他们已经将该食谱添加到了“保存的食谱”文件夹中,要么只是通过渲染一个模板来重定向他们,说明他们已经拥有该食谱,从而达到了某种效果。

这可能吗?

我在想一些办法:

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?

1 个答案:

答案 0 :(得分:2)

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

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

显然,这省略了很多细节,但这是一般的想法。