能否在Strawberry GraphQL Python中实现嵌套查询?
在Python的Strawberry GraphQL中实现嵌套查询
完全可以实现你想要的嵌套查询结构,无需再使用peopleList、peopleSingle这类扁平命名的查询字段。下面是具体实现方案:
1. 定义基础对象类型
先定义业务对应的GraphQL对象类型:
import strawberry from typing import List, Optional @strawberry.type class Person: id: int name: str @strawberry.type class Company: id: int name: str
2. 定义嵌套的查询操作类型
为每个资源创建专门的查询操作类型,封装list、single这类操作:
@strawberry.type class PeopleQueries: @strawberry.field def list(self) -> List[Person]: # 替换为实际的数据库查询逻辑 return [Person(id=1, name="张三"), Person(id=2, name="李四")] @strawberry.field def single(self, id: int) -> Optional[Person]: # 替换为实际的单个资源查询逻辑 return Person(id=id, name=f"用户{id}") @strawberry.type class CompanyQueries: @strawberry.field def list(self) -> List[Company]: # 替换为实际的数据库查询逻辑 return [Company(id=101, name="A公司"), Company(id=102, name="B公司")] @strawberry.field def single(self, id: int) -> Optional[Company]: # 替换为实际的单个资源查询逻辑 return Company(id=id, name=f"公司{id}")
3. 定义根查询类型
将嵌套查询类型作为根查询的字段:
@strawberry.type class Query: people: PeopleQueries = strawberry.field(resolver=lambda: PeopleQueries()) company: CompanyQueries = strawberry.field(resolver=lambda: CompanyQueries()) schema = strawberry.Schema(query=Query)
测试查询
现在可以执行你想要的嵌套查询:
query test { people { list { id name } single(id: 123) { id name } } company { list { id name } single(id: 456) { id name } } }
执行后会返回如下格式的结果:
{ "data": { "people": { "list": [ {"id": 1, "name": "张三"}, {"id": 2, "name": "李四"} ], "single": {"id": 123, "name": "用户123"} }, "company": { "list": [ {"id": 101, "name": "A公司"}, {"id": 102, "name": "B公司"} ], "single": {"id": 456, "name": "公司456"} } } }
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

