Cómo eliminar un registro por id en Flask-SQLAlchemy
⏰ 3 minutos de lectura
sergey
tengo users tabla en mi base de datos MySql. Esta mesa tiene id, name y age campos.
¿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() método.
adarsh
Puedes hacerlo,
User.query.filter_by(id=123).delete()
o
User.query.filter(User.id == 123).delete()
Asegurate que commit por delete() para tomar efecto.
asegúrate de poner db.session.commit() en el final. donde la base de datos: db = SQLAlchemy(app)
– ben
4 de octubre de 2016 a las 4:36
Advertencia: Tal delete no se conectará en cascada si confía en la conexión en cascada en python/ORM. Primero deberá consultar el objeto y luego eliminarlo.
– nirvana-msu
2 de febrero de 2018 a las 0:24
que pasaria si User no existe?
– senaps
14 de abril de 2019 a las 6:48
Los anteriores son sql directo DELETE declaraciones que no implican cargar un objeto en el orm antes de eliminarlo y @nirvana-msu es correcto en el sentido de que la base de datos no conoce las reglas en cascada establecidas en la relación a nivel de orm. Si, en cambio, puede configurarlos en las declaraciones de clave externa (es decir, en la relación de nivel de base de datos), la cascada funcionará bien (por ejemplo, Column('parent_id', ForeignKey('parents.id', ondelete='cascade'))).
– Michael Ekoka
16 oct 2020 a las 14:25
@senaps el método delete() devuelve la cantidad de elementos eliminados. Entonces, si User no existe, devuelve cero y no lanza ninguna excepción. Probé este comportamiento en Sqlalchemy v1.4.29 con una base de datos en memoria de SQLite.
– cristianmtown
27 de enero a las 14:08
Steve
Solo quiero compartir otra opción:
# mark two objects to be deleted
session.delete(obj1)
session.delete(obj2)
# commit (or flush)
session.commit()
cuando está ejecutando un registro, esta opción es bastante buena porque le permite realizar la consulta y registrar algo de lo que su usuario ha considerado insignificante. de esa manera, puede mostrarles el registro cuando le pregunten por qué falta ese registro.
– pitido_cheque
2 de noviembre de 2021 a las 2:57
Logovski Dmitrii
Otra posible solución, especialmente si desea eliminar por lotes
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información