我正在尝试这样做(见标题),但这有点复杂,因为我试图构建的字符串必须具有以下属性:
使用一个普通的''''''多行字符串会使注入变量变得困难。使用多个f字符串会使注入变量变得容易,但是每个花括号(有很多花括号)都必须加倍。而且每一行都必须前置一个f。另一方面,如果我尝试使用format,它也会被所有的花括号弄糊涂。有没有更好的办法我还没考虑过?
''''''
f
format
4sup72z81#
可以使用“"”多行字符串方法。对于注入变量,请确保在定义字符串时使用$符号,并在www.example.com方法的JSON参数中使用variables对象requests.post。下面是一个示例。ContactInput是我在GraphQL模式中定义的类型之一。
ContactInput
query = """ mutation ($input:[ContactInput!]!) { AddContacts(contacts: $input) { user_id } } """ variables = {'input': my_arrofcontacts} r = requests.post(url, json={'query': query , 'variables': variables})
e37o9pze2#
可以使用以下软件包graphql-query例如,对于查询
{ leftComparison: hero(episode: EMPIRE) { ...comparisonFields } rightComparison: hero(episode: JEDI) { ...comparisonFields } } fragment comparisonFields on Character { name appearsIn friends { name } }
我们有以下代码
from graphql_query import Argument, Operation, Query, Fragment, Field comparisonFields = Fragment( name="comparisonFields", type="Character", fields=["name", "appearsIn", Field(name="friends", fields=["name"])] ) leftComparison = Query( name="hero", alias="leftComparison", arguments=[Argument(name="episode", value="EMPIRE")], fields=[comparisonFields] ) rightComparison = Query( name="hero", alias="rightComparison", arguments=[Argument(name="episode", value="JEDI")], fields=[comparisonFields] ) operation = Operation( type="query", queries=[leftComparison, rightComparison], fragments=[comparisonFields] ) print(operation.render()) # query { # leftComparison: hero( # episode: EMPIRE # ) { # ...comparisonFields # } # # rightComparison: hero( # episode: JEDI # ) { # ...comparisonFields # } # } # # fragment comparisonFields on Character { # name # appearsIn # friends { # name # } # }
w8biq8rn3#
这甚至是滥用graphQL因为它被设计用来分离查询定义和变量(参数)。
query variables
如果你不是在写一个graphql编辑器或者其他工具,那么你根本就不应该使用字符串操作。顺便说一句,即使编辑器也不应该对字符串进行操作,而应该对AST进行操作。
使用对象操作更具弹性/可用性-例如,轻松解决条件问题:How to conditionally include an argument in a GraphQL query?
3条答案
按热度按时间4sup72z81#
可以使用“"”多行字符串方法。对于注入变量,请确保在定义字符串时使用$符号,并在www.example.com方法的JSON参数中使用variables对象requests.post。
下面是一个示例。
ContactInput
是我在GraphQL模式中定义的类型之一。e37o9pze2#
可以使用以下软件包graphql-query
例如,对于查询
我们有以下代码
w8biq8rn3#
这甚至是滥用graphQL因为它被设计用来分离查询定义和变量(参数)。
query variables
传递参数**。这在docs和许多教程中进行了描述。您应该了解并在实践中使用此技术。尝试使用字符串注入至少可以证明您缺乏知识。如果你不是在写一个graphql编辑器或者其他工具,那么你根本就不应该使用字符串操作。顺便说一句,即使编辑器也不应该对字符串进行操作,而应该对AST进行操作。
更新
使用对象操作更具弹性/可用性-例如,轻松解决条件问题:How to conditionally include an argument in a GraphQL query?