File: execute.rst

package info (click to toggle)
python-graphene 3.4.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,120 kB
  • sloc: python: 8,935; makefile: 214; sh: 18
file content (138 lines) | stat: -rw-r--r-- 3,040 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
.. _SchemaExecute:

Executing a query
=================

For executing a query against a schema, you can directly call the ``execute`` method on it.


.. code:: python

    from graphene import Schema

    schema = Schema(...)
    result = schema.execute('{ name }')

``result`` represents the result of execution. ``result.data`` is the result of executing the query, ``result.errors`` is ``None`` if no errors occurred, and is a non-empty list if an error occurred.


.. _SchemaExecuteContext:

Context
_______

You can pass context to a query via ``context``.


.. code:: python

    from graphene import ObjectType, String, Schema

    class Query(ObjectType):
        name = String()

        def resolve_name(root, info):
            return info.context.get('name')

    schema = Schema(Query)
    result = schema.execute('{ name }', context={'name': 'Syrus'})
    assert result.data['name'] == 'Syrus'


Variables
_________

You can pass variables to a query via ``variables``.


.. code:: python

    from graphene import ObjectType, Field, ID, Schema

    class Query(ObjectType):
        user = Field(User, id=ID(required=True))

        def resolve_user(root, info, id):
            return get_user_by_id(id)

    schema = Schema(Query)
    result = schema.execute(
        '''
          query getUser($id: ID) {
            user(id: $id) {
              id
              firstName
              lastName
            }
          }
        ''',
        variables={'id': 12},
    )

Root Value
__________

Value used for :ref:`ResolverParamParent` in root queries and mutations can be overridden using ``root`` parameter.

.. code:: python

    from graphene import ObjectType, Field, Schema

    class Query(ObjectType):
        me = Field(User)

        def resolve_user(root, info):
            return {'id': root.id, 'firstName': root.name}

    schema = Schema(Query)
    user_root = User(id=12, name='bob')
    result = schema.execute(
        '''
        query getUser {
            user {
                id
                firstName
                lastName
            }
        }
        ''',
        root=user_root
    )
    assert result.data['user']['id'] == user_root.id

Operation Name
______________

If there are multiple operations defined in a query string, ``operation_name`` should be used to indicate which should be executed.

.. code:: python

    from graphene import ObjectType, Field, Schema

    class Query(ObjectType):
        user = Field(User)

        def resolve_user(root, info):
            return get_user_by_id(12)

    schema = Schema(Query)
    query_string = '''
        query getUserWithFirstName {
            user {
                id
                firstName
                lastName
            }
        }
        query getUserWithFullName {
            user {
                id
                fullName
            }
        }
    '''
    result = schema.execute(
        query_string,
        operation_name='getUserWithFullName'
    )
    assert result.data['user']['fullName']