web-dev-qa-db-fra.com

Comment supprimer un enregistrement par identifiant dans Flask-SQLAlchemy

J'ai la table users dans ma base de données MySql. Cette table contient les champs id, name et age.

Comment puis-je supprimer un enregistrement de id?

Maintenant j'utilise le code suivant:

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

Mais je ne veux pas faire de requête avant l'opération de suppression. Est-ce qu'il y a un moyen de faire ça? Je sais que je peux utiliser db.engine.execute("delete from users where id=..."), mais j'aimerais utiliser la méthode delete().

93
Sergey

Tu peux le faire,

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

ou

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

Assurez-vous de commit pour que delete() prenne effet.

163
adarsh

Je veux juste partager une autre option:

# 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

Dans cet exemple, les codes suivants fonctionneront correctement:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()
19
Steve

Une autre solution possible spécialement si vous souhaitez supprimer le lot

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
2
Zaytsev Dmitry