如何获取Python gql.dsl模块构建的查询对应的字符串
gql库DSL模块生成原始查询字符串的查看方法
无需抓包,纯Python环境下可以通过以下两种方式直接拿到最终发往服务端的原始查询内容:
- 方法1:预转换打印(推荐,无需发起实际请求)
使用DSL组装完查询逻辑后,先通过dsl_gql方法把DSL结构转换成gql库标准的Document查询对象,直接将该对象转为字符串即可得到和实际请求完全一致的原始查询文本,示例代码:
from gql.dsl import dsl_gql # 以下为你已编写的DSL查询逻辑示例 # query = dsl.Query.user.select( # dsl.User.id, # dsl.User.name # ) # 转换为标准查询文档 final_query = dsl_gql(query) # 转字符串即可得到原始查询内容 raw_query = str(final_query) print(raw_query)
该方法可以在调用client.execute()发起请求前提前校验查询结构,是调试阶段最便捷的方式。
- 方法2:请求执行阶段自动打印
如果需要校验实际发起请求时传输的查询内容,可以开启gql库的DEBUG级别日志,客户端发起请求时会自动输出完整的请求payload,其中就包含原始查询字符串,配置方式:
import logging # 开启gql模块的调试日志 logging.basicConfig(level=logging.DEBUG) logging.getLogger("gql").setLevel(logging.DEBUG) # 后续正常初始化Client、发起请求即可,控制台会自动打印每次发送的原始查询内容
如果不需要全量调试日志,也可以自定义传输层的请求钩子,在请求发送前拦截payload中的query字段单独打印。
注意:不要直接打印未经过
dsl_gql转换的DSL节点对象,这类对象的字符串输出是内部调试表示,不是最终发往服务端的标准查询格式。
内容的提问来源于stack exchange,提问作者BenBole
相关产品推荐
相关产品推荐

