SQLAlchemy - выполняет вставку внутри обработчика after_execute - PullRequest
0 голосов
/ 05 декабря 2018

Я подключаю слушатель событий к своему движку:

     :
     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

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