Eliminazione della riga con il Pallone-SQLAlchemy

Sto cercando di fare una funzione per eliminare un record nel database con il pallone e l’estensione per SQLAlchemy. Il problema è che, invece di eliminare solo una riga, li cancella tutti. Qualcuno può dirmi cosa c’è di sbagliato con il mio codice?

@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)

Grazie in anticipo!

InformationsquelleAutor Tom Brunoli | 2011-02-07



One Reply
  1. 25

    Ho il sospetto che questa linea non è quello che pensi.

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

    Stai diventando una singola istanza (che hai già fatto prima), e utilizzando query effettivamente il problema di una nuova query su tutti gli oggetti senza filtro e quindi eliminare tutti loro.

    Probabilmente quello che voglio fare è questo:

        db.session.delete(page)
    • Fastidiosamente, che in realtà ha un errore (ho già provato) AttributeError: 'Page' object has no attribute 'delete'
    • Ho provato io stesso, ora, e aggiornato la mia risposta con una soluzione.
    • yep, quello fisso! Grazie!

Lascia un commento