SQLAlchemy: как удалить несколько строк без запроса

У меня есть таблица с миллионами строк. Я хочу удалить несколько строк с помощью предложения in. Однако, используя код:

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

Вышеприведенный код будет запрашивать результаты, а затем выполнить удаление. Я не хочу этого делать. Я хочу скорость.

Я хочу иметь возможность выполнить (да, я знаю о session.execute): Delete from users where id in ()

Итак, вопрос: Как я могу получить лучшее из двух миров, используя ORM? Могу ли я сделать удаление без жесткого кодирования запроса?

Ответ 1

Ага! Вы можете вызвать delete() для объекта таблицы со связанным предложением where.

Примерно так:

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

(а затем не забудьте выполнить инструкцию: engine.execute(stmt))

источник

Ответ 2

Чтобы завершить головокружительный ответ:

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