Я подключаю слушатель событий к своему движку:
:
sa.event.listen(db.engine, 'after_execute', receive_after_execute)
:
def receive_after_execute(conn, clauseelement, multiparams, params, result):
result = conn.execute(
sa.insert(SomeModel),
{
'someKey': 'someValue'
}
)
Обработчик вызывается, но после conn.execute он запускает новый after_execute событие, обработчик вызывается снова и запускает новое событие, и так далее.В результате получается множество SomeModel строк.
Чтобы подвести итог, мне нужно отловить каждый выполненный оператор sql в моем приложении и вставить 1 строку с данными об этом операторе.
РЕДАКТИРОВАТЬ: Кстати, я уже попробовал событие after_flush
и прекрасно работает в большинстве случаев.Но что-то подобное не срабатывает after_flush :
from sqlalchemy import sql
query = sql.text("""
INSERT INTO some_talble(col1, col2)...
""")
db.session.execute(query, some_parameters)
db.session.commit()
По этой причине я попытался использовать after_execute