Cómo eliminar un registro por id en Flask-SQLAlchemy
Tengo users
una tabla en mi base de datos MySql. Esta tabla tiene id
campos name
y 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.
Puedes hacerlo,
User.query.filter_by(id=123).delete()
o
User.query.filter(User.id == 123).delete()
Asegúrese de commit
que delete()
surta efecto.
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()
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í .
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()