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

128

Tengo una userstabla en mi base de datos MySql. Esta tabla tiene id, namey agecampos.

¿Cómo puedo eliminar algunos registros 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 eliminar la operación. ¿Hay alguna forma de hacer esto? Lo sé, puedo usar db.engine.execute("delete from users where id=..."), pero me gustaría usar el delete()método.

Sergey
fuente

Respuestas:

206

Puedes hacerlo,

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

o

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

Asegúrese commitde delete()que surta efecto.

fuerte
fuente
19
Asegúrate de ponerlo db.session.commit()al final. donde el db: db = SQLAlchemy(app)
Ben
¿Se puede usar IN con este método?
ram4nd
10
Advertencia: deleteno se aplicará en cascada si confía en la cascada en python / ORM. Deberá consultar primero el objeto y luego eliminarlo .
nirvana-msu
55
¿Qué pasaría si Userno existe?
senaps
¿Cómo podemos anular / extender este método delete ()? para una clase Usuario definido en nuestro models.py en la aplicación de matraz.
Hossein
35

Solo 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
fuente
Recibo un error de que la sesión está en uso
Ryan Aquino
9

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()
Zaytsev Dmitry
fuente