Flask-GraphQL报错AssertionError:Schema未被正确识别求助
问题解决方案
核心错误原因
你在GraphQLView.as_view中给schema参数传了GraphQL查询字符串(即你的query_str),但GraphQLView要求传入的是用Graphene定义的Schema对象,这就是触发AssertionError: A Schema is required to be provided to GraphQLView.的根本原因。
具体修复步骤
1. 用Graphene定义你的GraphQL Schema
根据你的OrderCancellation mutation需求,先定义对应的类型、mutation和Schema:
from graphene import ObjectType, Int, String, Field, InputObjectType, Mutation, Schema from flask import Flask from flask_graphql import GraphQLView # 定义Order类型,对应返回的订单结构 class Order(ObjectType): order_id = Int(required=True) sku = String(required=True) quantity = Int(required=True) # 定义mutation需要的输入参数类型 class OrderCancellationInput(InputObjectType): quantity = Int(required=True) # 定义取消订单的Mutation class OrderCancellation(Mutation): class Arguments: order_id = Int(required=True) sku = String(required=True) input = OrderCancellationInput(required=True) # 定义mutation返回的字段 order = Field(Order) def mutate(root, info, order_id, sku, input): # 这里替换为你的实际业务逻辑:比如操作SQLAlchemy修改订单状态/数量 # 示例返回模拟的订单数据 return OrderCancellation( order=Order( order_id=order_id, sku=sku, quantity=input.quantity ) ) # 定义根Mutation类型,注册所有mutation class Mutation(ObjectType): order_cancellation = OrderCancellation.Field() # 生成Schema对象(如果需要查询功能,还可以定义Query类型传入) schema = Schema(mutation=Mutation)
2. 正确配置GraphQLView
将生成的schema对象传入GraphQLView,而不是查询字符串:
app = Flask(__name__) # 配置GraphQL路由 app.add_url_rule( "/api/2023-01/graphql", view_func=GraphQLView.as_view( "graphql", schema=schema, # 这里传Schema对象,而非查询字符串 graphiql=True ) ) if __name__ == "__main__": app.run()
3. 执行你的Mutation
启动Flask服务后,访问http://localhost:5000/api/2023-01/graphql打开GraphiQL界面,在输入框中填入你的查询字符串并执行:
mutation OrderCancellation { orderCancellation(orderId: 321, sku:"abc-123", input: { quantity:80 }) { order { orderId, sku, quantity } } }
额外说明
- 普通REST POST接口正常是因为REST不需要Schema解析请求,而GraphQL依赖Schema验证和解析查询语句。
- 你使用的
Flask-GraphQL=2.0.1和graphene=2.1.9版本兼容上述写法,无需升级即可解决问题,避免版本冲突。
内容的提问来源于stack exchange,提问作者Asad Amir Khwaja
相关产品推荐
相关产品推荐

