Удаление строки с помощью Flask-SQLAlchemy - PullRequest
11 голосов
/ 07 февраля 2011

Я пытаюсь создать функцию для удаления записи в моей базе данных с помощью фляги и расширения для 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)

Заранее спасибо!

1 Ответ

25 голосов
/ 07 февраля 2011

Я подозреваю, что эта строка не соответствует вашим ожиданиям.

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

Вы получаете один экземпляр (который вы уже делали ранее), и, используя query, вы фактически запускаете новый запроснад всеми объектами без фильтрации и, следовательно, удаления их всех.

Вероятно, вы хотите сделать следующее:

    db.session.delete(page)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...