pythongraphqlgraphene-python

Best way to construct a GraphQL query string in Python


I'm trying to do this (see title), but it's a bit complicated since the string I'm trying to build has to have the following properties:

Using a normal '''''' multiline string makes injecting variables difficult. Using multiple f-strings makes injecting variables easy, but every curly brace, of which there are a lot, has to be doubled. And an f has to be prepended to each line. On the other hand, if I try using format, it also gets confused by all the curly braces.

Is there a better way that I haven't considered yet?


Solution

  • You can use the """ multiline string method. For injecting variables, make sure to use the $ sign while defining the string and use the variables object in the JSON parameter of the requests.post method.

    Here is an example. ContactInput is one of the types I defined in my GraphQL schema.

    query = """
      mutation ($input:[ContactInput!]!) {
        AddContacts(contacts: $input) {
          user_id
        }
      }
    """
    variables = {'input': my_arrofcontacts}
    r = requests.post(url, json={'query': query , 'variables': variables})