2016-01-26 90 views
2

對於下面的函數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' is not mapped

,如果我做了如下修改代碼

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

我不知道爲什麼。一()解決該問題的錯誤可以是固定的。由於查詢本身總是會找到一個結果。那麼爲什麼.one()需要?

+3

'.one()'返回找到的對象。 '... filter_by(...)'返回一個Query對象。 – Holloway

+0

@霍洛威這是一個答案。 – Maroun

回答

2

session.query(MenuItem).filter_by(id=menu_id)返回一個Query對象,可用於過濾或排序結果,而不是結果本身。

one()返回查詢發現的第一個對象。

當您嘗試刪除查詢時,它會抱怨Query對象未映射。

文檔是hereQuery對象也有一個delete方法,它將刪除所有匹配的對象。

相關問題