如何在 python 函数中编写 graphQL 突变?

Posted

技术标签:

【中文标题】如何在 python 函数中编写 graphQL 突变?【英文标题】:How do I write a graphQL mutation in a python function? 【发布时间】:2022-01-07 05:48:49 【问题描述】:

我想创建一个简单的 graphQL 突变的 python 函数。我有一个 graphQL 模式,并且有一个突变可以通过提供它的 ID 来删除一个对象。 GraphQL 文档显示:

delete(
id: ID!
): Boolean!

要使用全局 ID 删除对象,我尝试创建一个 python 函数,但我遇到了一个我无法弄清楚的 graphQL 语法错误。

#function to delete FIB
def deleteObj(self,id): # returns FIB deletion boolean
    
        objDel = self.graphQLClient.fetch("""
            mutation delete($id: [ID!]!) 
                delete(id: $id,) 
                    id
                
            
        """, 
            'id': id ,
            
        )
        info('***Object deletion result %s\n' % objDel)

我能够理解我犯了一些愚蠢的错误,但将来的解释会对我有所帮助。

我得到的错误是:

fib 删除结果 'data': None, 'errors': ['message': '语法 错误 GraphQL 请求 (3:34) 意外为空 IN \n\n2: 突变删除($id: [ID!]!) \n3: delete(id: $id,) \n ^\n4: \n', '位置': ['line': 3, 'column': 34]]

我可以使用类似这样的突变插入一个对象:

def insertFibEntry(self, prefix, name): # returns FIB entry ID
        
        fib = self.graphQLClient.fetch("""
            mutation insertFibEntry($name: Name!, $nexthops: [ID!]!) 
                insertFibEntry(name: $name, nexthops: $nexthops) 
                    id
                
            
        """, 
            'name': "/"+prefix ,
            'nexthops': [self.faces[name]['data']['createFace']['id']]
            
        )
        info('***fib result %s\n' % fib)
        info('***prefix is %s'% "'/"+prefix+"'"+ '\n')

【问题讨论】:

您是在与远程 graphql api 交互还是在实现自己的? 所以我使用的是 docker 映像,这部分来自该 docker 容器,所以我不知道他们是如何实现它的,但我能够插入一个条目,其中包含我添加的新插入代码之类的东西身体 【参考方案1】:

这是上述问题的解决方案-

    #function to delete obj
def deleteObj(self,id): # returns obj deletion boolean
        
        objDel = self.graphQLClient.fetch("""
            mutation delete($id:ID!) 
                delete(id: $id)
            
        """, 
            'id': id 
            
        )
        info('***fib deletion result %s\n' % objDel)
   

【讨论】:

以上是关于如何在 python 函数中编写 graphQL 突变?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 apollo graphql 服务器中编写解析 graphql 过滤器

如何使用 GraphQL?

如何使用`django-filters`编写将在整数字段上使用范围过滤器的GraphQL查询?

如何在 .graphql 文件中编写 GraphQl Upsert Query

如何使用 type-graphql 解析器函数获取 graphql 后端中的选定字段?

GraphQL。如何编写解析器