是否可以在将最终编译的原始查询字节发送到底层数据库引擎之前重写它们?我查看了事件 API,但它似乎没有公开这样的低级事件。用例:我想在所有查询的开头添加一个字符串,包含上下文元数据:/* {"trace_id":"1234","client_ip":"1.2.3.4", ...} */ SELECT ...数据是从数据库的查询日志中提取的,用于将事件与堆栈中的其他服务相关联。
1 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
只需将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
添加回答
举报
0/150
提交
取消