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!
Make sure to commit for delete() to take effect. You will need to query the object first, and then delete.
The delete() SQL Expression Construct The delete() function generates a new instance of Delete which represents a DELETE statement in SQL, that will delete rows from a table.
Delete multiple rows in SQLAlchemyGet the books table from the Metadata object initialized while connecting to the database. Pass the delete query to the execute() function and get all the results using fetchall() function.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With