Удаление строки с помощью Flask-SQLAlchemy
Я пытаюсь сделать функцию для удаления записи в моей базе данных с флягой и расширением для 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
Я подозреваю, что эта строка не так, как вы думаете.
Page.query.get(page_id).query.delete()
Вы получаете один экземпляр (который вы уже делали раньше), и используя query
, вы фактически выдаете новый запрос по всем объектам без фильтрации и, следовательно, удаляете все из них.
Возможно, что вы хотите сделать:
db.session.delete(page)