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

Python Graphene运行报Unknown argument "__annotations__"错误排查

问题产生原因
  • 直接原因:你使用了PEP 526 变量类型注解语法(username: graphene.String(required=True))定义Mutation的入参,你当前安装的graphene版本不支持该写法。旧版本graphene解析Arguments类属性时,会将Python自动生成的__annotations__魔法属性识别为未知参数,抛出对应错误。
  • 附加错误1:mutate方法中错误实例化了Graphene的UserTypeSchema映射类,该类不能直接添加到SQLAlchemy会话中,需要实例化你定义的User数据库模型类。
  • 附加错误2:CreateUser类未定义返回字段ok和user,参数问题修复后运行也会抛出字段不存在的错误;且UUID生成逻辑错误,uuid.UUID()用于解析已有UUID字符串,生成新UUID需调用uuid.uuid4()方法。
修复方案
  1. 替换Arguments类中的类型注解写法为旧版赋值写法,或升级graphene到支持类型注解的最新版本
  2. 补充CreateUser类的返回字段定义
  3. 修正模型实例化和UUID生成逻辑
  4. 简化Mutation字段注册参数,避免不必要的传参错误

修正后的完整代码示例:

import uuid
import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType
from api import db
# 替换为你实际的User模型导入路径
from your_model_path import User 

class UserType(SQLAlchemyObjectType):
    class Meta:
        model = User

class CreateUser(graphene.Mutation):
    # 定义返回字段
    ok = graphene.Boolean()
    user = graphene.Field(UserType)

    class Arguments:
        # 替换类型注解为赋值写法
        username = graphene.String(required=True)
    
    def mutate(root, info, username):
        # 实例化数据库模型类
        user = User(
            username=username,
            # 生成UUID并转为字符串存储
            userId = str(uuid.uuid4())
        )
        db.session.add(user)   
        db.session.commit() 
        return CreateUser(ok=True, user=user)

class Mutation(graphene.ObjectType):
    create_user_mutation = CreateUser.Field(
        description="creating a new user by providing the username."
    )

# 确保Query类已按业务逻辑正确定义
schema = graphene.Schema(query=Query, mutation=Mutation)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:04