{"id":990,"library":"graphene","title":"Graphene","description":"Graphene is an opinionated Python library for building GraphQL APIs easily. It provides a simple yet extendable API, with built-in support for Relay and integrations for popular web frameworks like Django and SQLAlchemy. The current stable version is 3.4.3, with active development and frequent releases.","status":"active","version":"3.4.3","language":"python","source_language":"en","source_url":"https://github.com/graphql-python/graphene","tags":["graphql","api","schema","relay","framework"],"install":[{"cmd":"pip install graphene","lang":"bash","label":"Install latest version"},{"cmd":"pip install 'graphene>=3.1'","lang":"bash","label":"Install Graphene v3.1 or newer (for v3 features)"}],"dependencies":[{"reason":"Core GraphQL implementation, Graphene v3 requires graphql-core v3 or higher.","package":"graphql-core","optional":false},{"reason":"Required for DateTime scalar parsing on Python versions prior to 3.11 (since Graphene v3.4.1).","package":"python-dateutil","optional":true},{"reason":"Official integration for Django framework.","package":"graphene-django","optional":true},{"reason":"Official integration for SQLAlchemy ORM.","package":"graphene-sqlalchemy","optional":true}],"imports":[{"symbol":"ObjectType","correct":"from graphene import ObjectType"},{"symbol":"String","correct":"from graphene import String"},{"symbol":"Schema","correct":"from graphene import Schema"},{"symbol":"Field","correct":"from graphene import Field"},{"note":"The import path for `to_global_id` changed in Graphene v3.0.0.","wrong":"from graphene.relay.node import to_global_id","symbol":"to_global_id","correct":"from graphene.relay import to_global_id"}],"quickstart":{"code":"import graphene\n\nclass Query(graphene.ObjectType):\n    hello = graphene.String(description='A typical hello world')\n\n    def resolve_hello(self, info):\n        return 'World'\n\nschema = graphene.Schema(query=Query)\n\n# Example usage:\nquery = '''\n    query SayHello {\n        hello\n    }\n'''\nresult = schema.execute(query)\nprint(result.data['hello'])\n# Expected output: World","lang":"python","description":"This quickstart defines a simple GraphQL schema with a single 'hello' field that returns 'World'. It demonstrates basic schema definition and execution."},"warnings":[{"fix":"Review `InputObjectType` usage and resolvers to correctly differentiate between omitted fields and explicitly `null` fields. Consider using `default_value` in `InputField` if `None` implies a default rather than `null`.","message":"In Graphene v3.3.0 and later, if an optional field in an `InputObjectType` is omitted in a GraphQL query, it is now passed as `None` to the Python input. This makes it indistinguishable from a field explicitly passed with `null`, requiring changes to how `None` values are interpreted in your resolvers.","severity":"breaking","affected_versions":">=3.3.0"},{"fix":"Ensure your project is running Python 3.x. Update argument names from `type` to `type_` where applicable. Review schema definitions and custom backend integrations as they may require refactoring due to underlying `graphql-core` changes.","message":"Graphene v3.0.0 involved a significant upgrade to `graphql-core` v3, dropping support for Python 2. Major changes include modifications to schema types, removal of the 'backends' concept, and renaming the `type` argument to `type_` in various Graphene constructs (e.g., `Field`, `Argument`) to avoid clashes with the Python built-in `type` function.","severity":"breaking","affected_versions":">=3.0.0 (from 2.x)"},{"fix":"Update imports from `from graphene.relay.node import to_global_id` to `from graphene.relay import to_global_id`.","message":"The import path for the `to_global_id` utility function, frequently used with Relay, changed in Graphene v3.0.0. Code importing it from `graphene.relay.node.to_global_id` will now raise an `ImportError`.","severity":"breaking","affected_versions":">=3.0.0 (from 2.x)"},{"fix":"If you are using Python versions less than 3.11 and the `DateTime` scalar, ensure you upgrade Graphene to v3.4.1 or later to avoid parsing errors.","message":"Graphene v3.4.0 removed the `aniso8601` dependency, which caused a regression in `DateTime` scalar parsing for Python versions prior to 3.11. This issue was resolved in v3.4.1 by introducing `python-dateutil` for `DateTime` parsing on Python < 3.11.","severity":"gotcha","affected_versions":"3.4.0 (for Python < 3.11 users)"},{"fix":"Ensure that any custom `Connection` classes you define for your SQLAlchemy models have unique names that do not clash with those `graphene-sqlalchemy` might generate automatically.","message":"When using `graphene-sqlalchemy`, automatically generated connection classes (e.g., `UserConnection` for a `User` model) can conflict with custom `Connection` classes you define if they share the same name. This can lead to unexpected errors during schema generation or execution.","severity":"gotcha","affected_versions":"All versions of `graphene-sqlalchemy`"}],"env_vars":null,"last_verified":"2026-05-12T22:18:19.977Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Ensure that Graphene's scalar types are referenced with the correct capitalization (e.g., `graphene.String` instead of `graphene.string`).\n\n```python\nimport graphene\n\nclass MyType(graphene.ObjectType):\n    my_field = graphene.String()\n```","cause":"Graphene's scalar types like String, Int, Boolean, etc., are defined with an uppercase first letter (e.g., `graphene.String`), but developers often mistakenly use lowercase, leading to an AttributeError due to Python's case sensitivity.","error":"AttributeError: module 'graphene' has no attribute 'string'"},{"fix":"Ensure that `graphql_jwt.middleware.JSONWebTokenMiddleware` is correctly added to both Django's `MIDDLEWARE` list and Graphene's `GRAPHENE` setting under `'MIDDLEWARES'` (note the plural 'S').\n\n```python\n# settings.py\nMIDDLEWARE = [\n    # ... other Django middleware\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'graphql_jwt.middleware.JSONWebTokenMiddleware',\n    # ...\n]\n\nGRAPHENE = {\n    'SCHEMA': 'your_project.schema.schema',\n    'MIDDLEWARES': [\n        'graphql_jwt.middleware.JSONWebTokenMiddleware',\n    ],\n}\n```","cause":"This error commonly occurs in `graphene-django` setups, particularly when configuring `graphql_jwt` middleware. It often indicates an incorrect or missing `MIDDLEWARES` setting in Django's `settings.py`, or improper placement/definition of the JWT middleware.","error":"TypeError: __init__() missing 1 required positional argument: 'get_response'"},{"fix":"Debug the resolver chain to identify where `None` is being returned instead of an object. Ensure that parent resolvers return valid objects (or dictionaries) and that `info.context` is properly populated if you are relying on it.\n\n```python\n# Example of a resolver returning None incorrectly\n# def resolve_my_field(root, info):\n#     user = User.objects.filter(id=root.user_id).first() # if user is not found, it's None\n#     return user.name # This would raise the error if user is None\n\n# Corrected resolver\ndef resolve_my_field(root, info):\n    user = User.objects.filter(id=root.user_id).first()\n    if user:\n        return user.name\n    return None # Or raise a specific error/return a default value\n```","cause":"This general Python error, when seen in Graphene, often means a resolver function returned `None` when an object was expected, or an attempt was made to access an attribute (like `.get()`) on `info.context` or another object that was unexpectedly `None`.","error":"AttributeError: 'NoneType' object has no attribute 'get'"},{"fix":"Upgrade Graphene and its dependencies to compatible versions. If you are on an older Graphene version, consider upgrading to Graphene 3.x, which usually has updated dependency ranges. Alternatively, you might need to pin `graphql-core` to a specific version known to be compatible with your Graphene installation.\n\n```bash\npip install --upgrade graphene graphql-core\n# If still problematic, try pinning graphql-core (e.g., for older Graphene versions)\n# pip install graphene==2.1.8 graphql-core==2.3.2\n```","cause":"This error typically indicates a version incompatibility between the `graphene` library and its underlying `graphql-core` dependency. The name or location of the `ResolveInfo` class might have changed in a newer `graphql-core` version than `graphene` expects.","error":"ImportError: cannot import name 'ResolveInfo' from 'graphql'"},{"fix":"When defining GraphQL types that represent Django models, ensure you import `DjangoObjectType` from `graphene_django.types` and inherit from it, especially in mutations where input fields are derived from the model.\n\n```python\n# Wrong:\n# from graphene import ObjectType\n# class MyModelType(ObjectType):\n#     class Meta:\n#         model = MyModel\n\n# Correct:\nfrom graphene_django.types import DjangoObjectType\n\nclass MyModelType(DjangoObjectType):\n    class Meta:\n        model = MyModel\n```","cause":"This error often occurs in `graphene-django` when a developer mistakenly imports `ObjectType` from `graphene` instead of `DjangoObjectType` from `graphene_django.types` when defining GraphQL types that should be linked to Django models. Mutations expect a specific structure which `DjangoObjectType` provides for model-backed types.","error":"Graphene Mutation error, fields must be a mapping (dict / OrderedDict)"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"3.4.3","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.31,"mem_mb":8.9,"disk_size":"22.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":8.9,"disk_size":"22.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.3,"mem_mb":8.9,"disk_size":"22.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.31,"mem_mb":8.9,"disk_size":"22.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2,"import_time_s":0.22,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.21,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2,"import_time_s":0.23,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.21,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.45,"mem_mb":10.1,"disk_size":"25.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.49,"mem_mb":10.1,"disk_size":"25.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.45,"mem_mb":10.1,"disk_size":"25.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.49,"mem_mb":10.1,"disk_size":"25.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.2,"import_time_s":0.41,"mem_mb":10.1,"disk_size":"26M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.37,"mem_mb":10.1,"disk_size":"26M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.1,"import_time_s":0.39,"mem_mb":10.1,"disk_size":"26M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":10.1,"disk_size":"26M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.66,"mem_mb":10.1,"disk_size":"16.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.66,"mem_mb":10.1,"disk_size":"16.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.66,"mem_mb":10.1,"disk_size":"16.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.67,"mem_mb":10.1,"disk_size":"16.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2,"import_time_s":0.59,"mem_mb":10.1,"disk_size":"17M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.62,"mem_mb":10.1,"disk_size":"17M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.9,"import_time_s":0.59,"mem_mb":10.1,"disk_size":"17M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.6,"mem_mb":10.1,"disk_size":"17M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.64,"mem_mb":10.4,"disk_size":"16.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.65,"mem_mb":10.4,"disk_size":"16.5M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.63,"mem_mb":10.4,"disk_size":"16.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.64,"mem_mb":10.4,"disk_size":"16.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2,"import_time_s":0.62,"mem_mb":10.4,"disk_size":"17M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.62,"mem_mb":10.4,"disk_size":"17M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.9,"import_time_s":0.6,"mem_mb":10.4,"disk_size":"17M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.67,"mem_mb":10.4,"disk_size":"17M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.28,"mem_mb":8.9,"disk_size":"22.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":8.9,"disk_size":"22.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.27,"mem_mb":8.9,"disk_size":"22.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":8.9,"disk_size":"22.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.3,"import_time_s":0.25,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.26,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.3,"import_time_s":0.26,"mem_mb":8.9,"disk_size":"23M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.25,"mem_mb":8.9,"disk_size":"23M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}