简体   繁体   中英

Sqlalchemy: Database delete error

For the following function

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)

When I try to delete an item. I get the following error

sqlalchemy.orm.exc.UnmappedInstanceError UnmappedInstanceError: Class 'sqlalchemy.orm.query.Query' is not mapped

The error can be fixed if I do the following change to the code

item = session.query(MenuItem).filter_by(id = menu_id).one()

I am not sure why the .one() fixes the problem. Since the query itself will always find one result. So why is the .one() needed?

The session.query(MenuItem).filter_by(id=menu_id) returns a Query object that can be used to filter or order the results, not the results themselves.

one() returns the first object the query finds.

When you try to delete the query, it complains that the Query object is not mapped.

Docs are here . The Query object also has a delete method that will delete all matched objects.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM