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

"Выполнить массовый запрос на удаление. Возвращает количество удаленных строк, исключая любые каскады".

Другие вопросы по тегам