web-dev-qa-db-fra.com

SQLAlchemy: Comment supprimer plusieurs lignes sans interroger

J'ai une table qui a des millions de lignes. Je souhaite supprimer plusieurs lignes via une clause in. Cependant, en utilisant le code:

session.query(Users).filter(Users.id.in_(subquery....)).delete()

Le code ci-dessus interrogera les résultats, puis exécutera la suppression. Je ne veux pas faire ça. Je veux de la vitesse.

Je veux pouvoir exécuter (oui je connais la session.execute): Delete from users where id in ()

Donc la question: Comment puis-je tirer le meilleur parti de deux mondes, en utilisant l'ORM? Puis-je faire la suppression sans coder en dur la requête?

23
supreme Pooba

Oui! Vous pouvez appeler delete() sur l'objet table avec une clause where associée.

Quelque chose comme ça:

stmt = Users.__table__.delete().where(Users.id.in_(subquery...))

(puis n'oubliez pas d'exécuter l'instruction: engine.execute(stmt))

source

33
dizzyf

Pour terminer vertige réponse:

delete_q = Report.__table__.delete().where(Report.data == 'test')
db.session.execute(delete_q)
db.session.commit()
9
Mickael