You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python字典列表构造可直接使用的GraphQL调用字符串

问题场景

你在使用Python requests 库发起GraphQL mutation请求时,需要将Python字典列表序列化为键名不带双引号的GraphQL兼容格式字符串,当前逐字段替换的方式可运行但扩展性差。

可选优化方案

无依赖通用序列化方法

不需要安装额外第三方库,也不需要逐字段写替换规则,写一个简单的递归序列化函数即可适配任意结构的字典列表,自动移除键名两侧的双引号,值部分保留标准JSON格式保证类型正确:

import json

def serialize_graphql_input(data):
    if isinstance(data, list):
        serialized_items = [serialize_graphql_input(item) for item in data]
        return f"[{', '.join(serialized_items)}]"
    elif isinstance(data, dict):
        serialized_kv = []
        for key, value in data.items():
            serialized_kv.append(f"{key}: {json.dumps(value)}")
        return f"{{{', '.join(serialized_kv)}}}"
    return json.dumps(data)

# 调用示例
my_list_of_dicts = [
    {"custom_module_id": "23", "answer": "some text 2", "user_id": "111"}, 
    {"custom_module_id": "24", "answer": "a", "user_id": "111"}
]
my_query_string = serialize_graphql_input(my_list_of_dicts)

运行后输出的字符串完全符合你需要的格式,后续新增、删除字典字段都不需要修改序列化逻辑。

生产环境推荐方案:使用GraphQL专用客户端

手动拼接、序列化GraphQL query字符串很容易出现语法错误,遇到值里带特殊字符(比如双引号、换行)时还可能出现转义问题,生产环境更推荐使用专门的GraphQL Python客户端,这类工具的优势非常明显:

  • 不需要手动处理任何格式转换,直接传入原生Python字典/列表作为变量即可,客户端会自动生成符合规范的请求内容
  • 自带参数转义,从根源避免语法错误和注入风险
  • 支持query模板缓存、语法校验、错误提示等实用功能

使用时遵循GraphQL官方推荐的「query模板+variables传参」模式即可,完全不需要手动拼值部分的字符串:

# 定义mutation模板,不需要把值硬编码在query里
mutation_query = """
mutation SubmitCustomAnswers($answerList: [CustomAnswerInput!]!) {
  submitCustomAnswers(answers: $answerList) {
    code
    message
  }
}
"""
# 变量直接传原生Python结构,客户端自动做序列化
variables = {"answerList": my_list_of_dicts}
# 发起请求
resp = client.execute(mutation_query, variables=variables)

额外提醒:不要把用户输入的内容直接拼接在query字符串里,用variables传参是GraphQL的标准最佳实践。

内容的提问来源于stack exchange,提问作者vasili111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:27:21