为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2022-06-07 16:39:45
是否可以在将最终编译的原始查询字节发送到底层数据库引擎之前重写它们?我查看了事件 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


查看完整回答
反对 回复 2022-06-07
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信