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

如何通过Graphene实现先访问BasicQueryData再调用oneNode查询?

实现GraphQL请求通过指定字段进入子查询类调用方法

问题背景

原本直接将BasicQuery作为根查询类时,oneNode查询可正常运行。现在调整为在根Query类中嵌套BasicQuery作为字段,希望发送请求时先通过BasicQueryData字段进入,再调用oneNode方法。

解决方案

需要调整根查询类的字段定义,添加解析方法确保能返回子查询类的实例,同时匹配请求中的字段名:

  1. 匹配请求字段名:将根Query中的字段名调整为与请求里的BasicQueryData一致,可通过name参数显式指定,或利用Graphene的蛇形命名转驼峰规则自动转换
  2. 添加解析方法:为该字段编写resolve方法,返回BasicQuery类的实例,这样才能访问其下的oneNode子字段

修改后的schema.py代码:

from graphene import Schema, Field, ObjectType
from .basic_objects.queries import BasicQuery
from .basic_objects.mutations import BasicMutation


class Query(ObjectType):
    # 定义与请求匹配的字段,name参数指定GraphQL暴露的名称
    basic_query_data = Field(BasicQuery, name="BasicQueryData")

    # 解析方法:返回BasicQuery实例,供后续调用其子字段
    def resolve_basic_query_data(self, info):
        return BasicQuery()

    # 其他查询字段...


class Mutation(ObjectType):
    basic_mutation = Field(BasicMutation, name="BasicMutation")

    def resolve_basic_mutation(self, info):
        return BasicMutation()


schema = Schema(query=Query, mutation=Mutation)

验证请求

你的测试请求结构是正确的,现在可以正常执行:

query MyQuery {
  BasicQueryData {
    oneNode(id: 1) {
      comment
      coordinateY
    }
  }
}

关键说明

  • 当把子查询类作为根查询的字段时,必须提供resolve方法返回该子查询类的实例,否则Graphene无法解析其子字段
  • 字段名需与请求中的名称严格匹配,若使用蛇形命名(如basic_query_data),Graphene会自动转为驼峰格式BasicQueryData,可省去name参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:16