sqlalchemy: получить строки, затронутые массовым удалением - PullRequest
4 голосов
/ 21 января 2012

Мне нужно получить все строки, на которые повлияло массовое удаление, например:

Session.query(SomeClass).filter_by(foo='bar').delete()

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

Ответы [ 2 ]

4 голосов
/ 22 января 2012

Хорошо, нашли ответ \ ☺ / Вы можете повторно выполнить оператор 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)
2 голосов
/ 24 июля 2012

С

https://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.delete

Выполнить запрос на массовое удаление.

Удаляет строки, соответствующие этому запросу, из базы данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...