2011-02-07 32 views
11

Estoy intentando hacer una función para eliminar un registro en mi base de datos con matraz y la extensión para SQLAlchemy. El problema es que, en lugar de eliminar solo una fila, las elimina todas. ¿Puede alguien decirme qué pasa con mi código?Borrando fila con 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) 

¡Gracias de antemano!

Respuesta

24

Sospecho que esta línea no es lo que piensas.

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

le está dando una sola instancia (que ya se hacía antes), y usando query en realidad se emitirá una nueva consulta sobre todos los objetos sin filtrar y por lo tanto la eliminación de todos ellos.

Probablemente lo que quiere hacer es lo siguiente:

db.session.delete(page) 
+0

Irritantemente que en realidad tiene un error (i bastante bueno en ello) 'AttributeError: objeto 'Página' no tiene atributo 'delete'' –

+0

I @tominated intenté esto yo mismo ahora, y actualicé mi respuesta con una solución. –

+0

sí, eso lo solucionó! ¡Gracias! –

Cuestiones relacionadas