我正在将事件侦听器附加到我的引擎上:
:
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
的原因