Ответ 1
Ага! Вы можете вызвать delete()
для объекта таблицы со связанным предложением where.
Примерно так:
stmt = Users.__table__.delete().where(Users.id.in_(subquery...))
(а затем не забудьте выполнить инструкцию: engine.execute(stmt)
)
У меня есть таблица с миллионами строк. Я хочу удалить несколько строк с помощью предложения in. Однако, используя код:
session.query(Users).filter(Users.id.in_(subquery....)).delete()
Вышеприведенный код будет запрашивать результаты, а затем выполнить удаление. Я не хочу этого делать. Я хочу скорость.
Я хочу иметь возможность выполнить (да, я знаю о session.execute): Delete from users where id in ()
Итак, вопрос: Как я могу получить лучшее из двух миров, используя ORM? Могу ли я сделать удаление без жесткого кодирования запроса?
Ага! Вы можете вызвать delete()
для объекта таблицы со связанным предложением where.
Примерно так:
stmt = Users.__table__.delete().where(Users.id.in_(subquery...))
(а затем не забудьте выполнить инструкцию: engine.execute(stmt)
)
Чтобы завершить головокружительный ответ:
delete_q = Report.__table__.delete().where(Report.data == 'test')
db.session.execute(delete_q)
db.session.commit()