15

我正在尝试使用烧瓶和 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)

提前致谢!

4

1 回答 1

32

我怀疑这条线并不像你想的那样。

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

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

可能您想要做的是:

    db.session.delete(page)
于 2011-02-07T12:53:32.650 回答