graphql-python
graphene-sqlalchemy
Python

Graphene SQLAlchemy integration

Last updated Jun 25, 2026
985
Stars
223
Forks
80
Issues
0
Stars/day
Attention Score
48
Language breakdown
No language data available.
โ–ธ Files click to expand
README

Version 3.0 is in beta stage. Please read https://github.com/graphql-python/graphene-sqlalchemy/issues/348 to learn about progress and changes in upcoming beta releases.


Graphene Logo Graphene-SQLAlchemy

Build Status PyPI version GitHub release (latest by date including pre-releases) codecov

A SQLAlchemy integration for Graphene.

Installation

For installing Graphene, just run this command in your shell.

pip install --pre "graphene-sqlalchemy"

Examples

Here is a simple SQLAlchemy model:

from sqlalchemy import Column, Integer, String

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class UserModel(Base): tablename = 'user' id = Column(Integer, primary_key=True) name = Column(String) last_name = Column(String)

To create a GraphQL schema for it, you simply have to write the following:

import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType

class User(SQLAlchemyObjectType): class Meta: model = UserModel # use only_fields to only expose specific fields ie "name" # only_fields = ("name",) # use excludefields to exclude specific fields ie "lastname" # excludefields = ("lastname",)

class Query(graphene.ObjectType): users = graphene.List(User)

def resolve_users(self, info): query = User.get_query(info) # SQLAlchemy query return query.all()

schema = graphene.Schema(query=Query)

We need a database session first:

from sqlalchemy import (create_engine)
from sqlalchemy.orm import (scoped_session, sessionmaker)

engine = createengine('sqlite:///database.sqlite3', convertunicode=True) dbsession = scopedsession(sessionmaker(autocommit=False, autoflush=False, bind=engine))

We will need this for querying, Graphene extracts the session from the base.

Alternatively it can be provided in the GraphQLResolveInfo.context dictionary under context["session"]

Base.query = dbsession.queryproperty()

Then you can simply query the schema:

query = '''
    query {
      users {
        name,
        lastName
      }
    }
'''
result = schema.execute(query, contextvalue={'session': dbsession})

You may also subclass SQLAlchemyObjectType by providing abstract = True in your subclasses Meta:

from graphene_sqlalchemy import SQLAlchemyObjectType

class ActiveSQLAlchemyObjectType(SQLAlchemyObjectType): class Meta: abstract = True

@classmethod def get_node(cls, info, id): return cls.get_query(info).filter( and(cls.meta.model.deleted_at==None, cls._meta.model.id==id) ).first()

class User(ActiveSQLAlchemyObjectType): class Meta: model = UserModel

class Query(graphene.ObjectType): users = graphene.List(User)

def resolve_users(self, info): query = User.get_query(info) # SQLAlchemy query return query.all()

schema = graphene.Schema(query=Query)

Full Examples

To learn more check out the following examples:

Contributing

See CONTRIBUTING.md

ยฉ 2026 GitRepoTrend ยท graphql-python/graphene-sqlalchemy ยท Updated daily from GitHub