Skip to main content

Python DB-API and SQLAlchemy interface for GraphQL APIs.

Project description

graphql-db-api PyPI version main workflow codecov

A Python DB API 2.0 for GraphQL APIs

This module allows you to query GraphQL APIs using SQL.

SQLAlchemy support

This module provides a SQLAlchemy dialect.

from sqlalchemy.engine import create_engine

engine = create_engine('graphql://host:port/path?is_https=0')

Example Usage

Querying Connections

from sqlalchemy import create_engine
from sqlalchemy import text

# We use GraphQL SWAPI (The Star Wars API) c/o Netlify:
engine = create_engine('graphql://swapi-graphql.netlify.app/.netlify/functions/index')

with engine.connect() as connection:
    # Demonstration of requesting nested resource of homeworld
    # and then selecting fields from it
    for row in connection.execute(text("select name, homeworld__name from 'allPeople?include=homeworld'")):
        print(row)

Querying Lists

from sqlalchemy import create_engine
from sqlalchemy import text

engine = create_engine('graphql://pet-library.moonhighway.com/')

with engine.connect() as connection:
    for row in connection.execute(text("select id, name from 'allPets?is_connection=0'")):
        print(row)

Superset support

In order to use with Superset, install this package and then use the graphql protocol in the SQLAlchemy URI like: graphql://swapi-graphql.netlify.app/.netlify/functions/index. We install a db_engine_spec so Superset should recognize the driver.

Roadmap

  • Non-Connections top level
  • Path traversal (basic)
  • Path traversal (basic + nested)
  • Path traversal (list / connection)
  • Bearer Tokens in Authorization Header
  • Advanced Auth (e.g. with token refresh)
  • Passing Headers (e.g. Auth in other locations)
  • Filtering
  • Sorting
  • Relay Pagination

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page