Sqlalchemy:数据库删除错误

时间:2016-01-26 12:41:14

标签: python sqlalchemy

对于以下功能

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()?

1 个答案:

答案 0 :(得分:4)

session.query(MenuItem).filter_by(id=menu_id)会返回一个Query对象,可用于过滤或排序结果,而非结果本身。

one()返回查询找到的第一个对象。

当您尝试删除查询时,它会抱怨Query对象未映射。

文档为hereQuery对象还有一个delete方法,可以删除所有匹配的对象。