Deleting row with Flask-SQLAlchemy


Question

I'm trying to make a function to delete a record in my database with flask and the extension for SQLAlchemy. Problem is, instead of deleting just one row, it deletes all of them. Can someone tell me what's wrong with my code?

@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)

Thanks in advance!

1
11
2/7/2011 11:58:42 AM

Accepted Answer

I suspect that this line does not what you think.

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

You're getting a single instance (which you already did before), and by using query you actually issue a new query over all objects without filtering and therefore deleting all of them.

Probably what you want to do is this:

    db.session.delete(page)
25
2/8/2011 10:21:40 AM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon