Cómo eliminar un registro por id en Flask-SQLAlchemy

Resuelto Sergey asked hace 10 años • 4 respuestas

Tengo usersuna tabla en mi base de datos MySql. Esta tabla tiene idcampos namey age.

¿ Cómo puedo eliminar algún registro por id?

Ahora uso el siguiente código:

user = User.query.get(id)
db.session.delete(user)
db.session.commit()

Pero no quiero hacer ninguna consulta antes de la operación de eliminación. ¿Hay alguna manera de hacer esto? Lo sé, puedo usar db.engine.execute("delete from users where id=..."), pero me gustaría usar delete()el método.

Sergey avatar Nov 27 '14 03:11 Sergey
Aceptado

Puedes hacerlo,

User.query.filter_by(id=123).delete()

o

User.query.filter(User.id == 123).delete()

Asegúrese de commitque delete()surta efecto.

adarsh avatar Nov 26 '2014 21:11 adarsh

Sólo quiero compartir otra opción:

# mark two objects to be deleted
session.delete(obj1)
session.delete(obj2)

# commit (or flush)
session.commit()

http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#deleting

En este ejemplo, los siguientes códigos funcionarán bien:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()
Steve avatar Aug 22 '2017 15:08 Steve

En sqlalchemy 1.4 (estilo 2.0) puedes hacerlo así:

from sqlalchemy import select, update, delete, values

sql1 = delete(User).where(User.id.in_([1, 2, 3]))
sql2 = delete(User).where(User.id == 1)

db.session.execute(sql1)
db.session.commit()

o

u = db.session.get(User, 1)
db.session.delete(u)
db.session.commit()

En mi opinión, usar seleccionar, actualizar y eliminar es más legible. La comparación de estilos 1.0 vs 2.0 se puede encontrar aquí .

Abc Xyz avatar May 29 '2021 19:05 Abc Xyz

Otra posible solución, especialmente si desea eliminar por lotes.

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
Logovskii Dmitrii avatar Mar 14 '2019 12:03 Logovskii Dmitrii