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?
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)
)
Pour terminer vertige réponse:
delete_q = Report.__table__.delete().where(Report.data == 'test')
db.session.execute(delete_q)
db.session.commit()