2011-02-07 34 views
11

Tôi đang cố gắng tạo một hàm để xóa bản ghi trong cơ sở dữ liệu của tôi bằng bình và phần mở rộng cho SQLAlchemy. Vấn đề là, thay vì xóa chỉ một hàng, nó sẽ xóa tất cả chúng. Ai đó có thể cho tôi biết có gì sai với mã của tôi không?Xóa hàng bằng Flask-SQLAlchemy

@app.route('/admin/delete/<int:page_id>', methods=['GET','POST']) 
@requires_auth 
def delete_page(page_id): 
    page = Page.query.get(page_id) 
    if not page: 
     abort(404) 
    if page.children: 
     flash('You can not delete a page with child pages. Delete them, or assign them a different parent.', 
       'error') 
     return redirect(url_for('admin_page')) 
    if request.method == 'POST': 
     Page.query.get(page_id).query.delete() 
     db.session.commit() 
     flash('Page was deleted successfully', 'success') 
     return redirect(url_for('admin_page')) 
    return render_template('admin_delete.html', page_title=page.title, page_id=page_id) 

Cảm ơn bạn trước!

Trả lời

24

Tôi nghi ngờ rằng dòng này không phải là những gì bạn nghĩ.

Page.query.get(page_id).query.delete() 

Bạn đang nhận được một trường hợp duy nhất (mà bạn đã làm trước đó), và bằng cách sử dụng query bạn thực sự phát hành một truy vấn mới trên tất cả các đối tượng mà không cần lọc và do đó xóa tất cả chúng.

db.session.delete(page) 
+0

Khó chịu, mà thực sự có lỗi (tôi đã thử nó) 'AttributeError::

Có lẽ những gì bạn muốn làm điều này là 'Trang' đối tượng không có thuộc tính 'delete'' –

+0

@tominated tôi cố gắng này bản thân mình bây giờ, và cập nhật câu trả lời của tôi với một giải pháp. –

+0

vâng, đã sửa nó! Cảm ơn! –