我正在使用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?
答案 0 :(得分:2)
保存配方时,可以使用try / except块。像这样:
try:
recipe.save()
except DuplicateKeyError:
return render_template('error.html')
显然,这省略了很多细节,但这是一般的想法。