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

2024-04-27 04:33:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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


Tags: 数据字符串引擎ipclientapiid数据库
1条回答
网友
1楼 · 发布于 2024-04-27 04:33:49

只需将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

相关问题 更多 >