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

Python 在发送到引擎之前重写SQLAlchemy查询,python,sqlalchemy,Python,Sqlalchemy,在将最终编译的原始查询字节发送到基础数据库引擎之前,是否可以重写这些字节?我看过Events API,但它似乎没有公开这样的低级事件 用例:我想在所有查询的开头添加一个字符串,其中包含上下文元数据: /* {"trace_id":"1234","client_ip":"1.2.3.4", ...} */ SELECT ... 数据从数据库的查询日志中提取,并用于将事件与堆栈中的其他服务关联起来。只需使用before\u cursor\u执行事件,并使用retval=True,如中所示 @eve

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

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

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

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

只需使用
before\u cursor\u执行
事件,并使用
retval=True
,如中所示

@event.listens(引擎,“在光标执行之前”,retval=True)
游标执行前定义(conn、游标、语句、,
参数、上下文、executemany):
语句=“/*{}*/{}”。格式(
json.dumps({
“跟踪id”:“1234”,
“客户ip”:“1.2.3.4”,
}),
陈述
)
返回语句、参数

只需在执行
retval=True
事件之前使用
,如中所示

@event.listens(引擎,“在光标执行之前”,retval=True)
游标执行前定义(conn、游标、语句、,
参数、上下文、executemany):
语句=“/*{}*/{}”。格式(
json.dumps({
“跟踪id”:“1234”,
“客户ip”:“1.2.3.4”,
}),
陈述
)
返回语句、参数