猿问

在发送到引擎之前重写 SQLAlchemy 查询

是否可以在将最终编译的原始查询字节发送到底层数据库引擎之前重写它们?我查看了事件 API,但它似乎没有公开这样的低级事件。

用例:我想在所有查询的开头添加一个字符串,包含上下文元数据:

/* {"trace_id":"1234","client_ip":"1.2.3.4", ...} */ SELECT ...

数据是从数据库的查询日志中提取的,用于将事件与堆栈中的其他服务相关联。


吃鸡游戏
浏览 109回答 1
1回答

慕运维8079593

只需将before_cursor_execute事件与 一起使用retval=True,如https://github.com/sqlalchemy/sqlalchemy/wiki/Profiling所示@event.listens_for(Engine, "before_cursor_execute", retval=True)def before_cursor_execute(conn, cursor, statement,    parameters, context, executemany):  statement = "/* {} */ {}".format(    json.dumps({      "trace_id": "1234",      "client_ip": "1.2.3.4",    }),    statement  )  return statement, parameters
随时随地看视频慕课网APP

相关分类

Python
我要回答