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

Flask集成graphene与py2neo:Query类/resolver无法使用变量

问题解决方案

根源分析

你遇到的错误是版本兼容性问题:Graphene 3.x 依赖的 graphql-core 最低版本为 3.2.0,但你指定了 graphql-core==3.1.0。graphql-core 3.1.0 的 GraphQLArgument 构造函数不支持 deprecation_reason 参数,而 Graphene 3.x 会自动传递该参数,导致初始化报错。


解决方案

方案一:升级依赖版本(推荐)

修改你的依赖配置,将 graphql-core 版本提升至 3.2.0 及以上:

# requirements.txt
Flask==2.2.3
graphene>=3.0
py2neo==2021.2.3
graphql-server[flask]
graphql-core>=3.2.0

重新构建 Docker 容器,让依赖重新安装即可。

方案二:兼容旧版本的参数定义(不推荐,仅临时使用)

如果无法升级 graphql-core,可以显式使用 graphene.Argument 定义查询参数,避免自动生成 deprecation_reason 参数:

class Query(graphene.ObjectType):
    hello = graphene.String(description='A typical hello world')
    # 显式使用 Argument 定义参数
    movie = graphene.Field(lambda: MovieSchema, title=graphene.Argument(graphene.String))

    def resolve_hello(self, info):
        return 'World'
    
    def resolve_movie(self, info, title):
        movie = Movie.fetch(title=title)
        # 将 py2neo 实例转换为 Graphene Schema 对象
        return MovieSchema(id=str(movie.id), title=movie.title, year=movie.year) if movie else None

额外修正(潜在问题)

你当前的代码还有两个需要修正的问题:

  1. py2neo OGM 模型错误使用 Graphene 类型:
    py2neo 的模型属性应该用 py2neo 自带的 Property 定义,而非 Graphene 类型,修正后:
    from py2neo.ogm import Property, RelatedFrom
    
    class Movie(BaseModel):
        __primarykey__='title'
    
        id = Property()
        title = Property()
        year = Property()
        persons = RelatedFrom("Person", "ACTED_IN")
    
        def as_dict(self):
            return {
                'id': self.id,
                'title': self.title,
                'year': self.year,
            }
        
        @classmethod
        def fetch(cls, title):
            return cls.match(graph, title).first()
    
  2. fetch 方法需改为类方法:
    你调用的是 Movie.fetch(title=title),但原方法是实例方法,必须添加 @classmethod 装饰器才能正常调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:27