一尘不染

用Flask-SQLAlchemy删除行

flask

我试图做一个函数来删除我的数据库中带有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)

提前致谢!


阅读 850

收藏
2020-04-08

共1个答案

一尘不染

我怀疑这条线与你的想法不符。

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

你将获得一个实例(你之前已经做过),并且通过使用query它实际上对所有对象发出了一个新查询,而不进行过滤,因此删除了所有对象。

你可能想做的是:

    db.session.delete(page)
2020-04-08