对于以下功能
def deleteMenuItem(restaurant_id,menu_id):
if request.method == 'POST':
item = session.query(MenuItem).filter_by(id = menu_id)
session.delete(item)
session.commit()
return redirect(url_for('showMenu',restaurant_id =restaurant_id))
else:
return render_template('deletemenu.html',restaurant_id=restaurant_id,menu_id=menu_id)
当我尝试删除某个项目时。我收到以下错误
sqlalchemy.orm.exc.UnmappedInstanceError UnmappedInstanceError:Class ' sqlalchemy.orm.query.Query'未映射
如果我对代码进行以下更改
,则可以修复错误item = session.query(MenuItem).filter_by(id = menu_id).one()
我不确定为什么.one()修复了这个问题。由于查询本身总会找到一个结果。那么为什么需要.one()?
答案 0 :(得分:4)
session.query(MenuItem).filter_by(id=menu_id)
会返回一个Query
对象,可用于过滤或排序结果,而非结果本身。
one()
返回查询找到的第一个对象。
当您尝试删除查询时,它会抱怨Query
对象未映射。
文档为here。 Query
对象还有一个delete
方法,可以删除所有匹配的对象。