sqlalchemy: получить строки, затронутые массовым удалением
Мне нужно получить все строки, на которые повлияло массовое удаление, например:
Session.query(SomeClass).filter_by(foo='bar').delete()
Я нашел возможность подписаться на массовые события удаления, но не могу понять, как я могу использовать это событие для получения необходимой мне информации.
2 ответа
Решение
Хорошо, нашли ответ \☺/ Вы можете повторно выполнить оператор select, который использовался для выбора строк для массового удаления. К сожалению, вы не можете запросить объекты ORM, но вы можете получить список всех удаленных строк со старыми значениями столбцов в виде кортежей:
def after_bulk_delete(session, query, query_context, result):
affected_table = query_context.statement.froms[0]
affected_rows = query_context.statement.execute().fetchall()
sqlalchemy.event.listen(Session, "after_bulk_delete", after_bulk_delete)
От
http://docs.sqlalchemy.org/en/rel_0_7/orm/query.html
"Выполнить массовый запрос на удаление. Возвращает количество удаленных строк, исключая любые каскады".