datasette-graphql

A GraphQL endpoint for Datasette


Keywords
datasette, datasette-io, datasette-plugin, graphql, sqlite
Licenses
Apache-2.0/libpng-2.0
Install
pip install datasette-graphql==0.1a4

Documentation

datasette-graphql

PyPI Changelog License

A GraphQL endpoint for Datasette

Work in progress alpha - this has many missing features.

Try out a live demo at datasette-graphql-demo.datasette.io/graphql.

Installation

Install this plugin in the same environment as Datasette.

$ pip install datasette-graphql

Usage

This plugin up /graphql as a GraphQL endpoint for the first attached database.

Querying for tables and columns

Individual tables can be queried like this:

{
  repos {
    id
    full_name
    description
  }
}

Accessing nested objects

If a column is a foreign key to another table, you can request columns of that table using a nested query like this:

{
  repos {
    id
    full_name
    owner {
      id
      login
    }
  }
}

Filtering tables

You can filter the rows returned for a specific table using the filters: argument. This accepts a list of filters, where a filter is a string of the form column=value or column__op=value. For example, to return just repositories with the Apache 2 license and more than 10 stars:

{
  repos(filters: ["license=apache-2.0", "stargazers_count__gt=10"]) {
    full_name
    stargazers_count
    license {
      key
    }
  }
}

This is the same format used for querystring arguments to the Datasette table view, see column filter arguments in the Datasette documentation.

Auto camelCase

The names of your columns and tables default to being matched by their representations in GraphQL.

If you have tables with names_like_this you may want to work with them in GraphQL using namesLikeThis, for consistency with GraphQL and JavaScript conventions.

You can turn on automatic camelCase using the "auto_camelcase" plugin configuration setting in metadata.json, like this:

{
    "plugins": {
        "datasette-graphql": {
            "auto_camelcase": true
        }
    }
}

Still to come

See issues for a full list. Planned improvements include:

  • Pagination
  • Canned query support
  • Ability to allowlist specific tables, views and canned queries

Development

To set up this plugin locally, first checkout the code. Then create a new virtual environment:

cd datasette-graphql
python3 -mvenv venv
source venv/bin/activate

Or if you are using pipenv:

pipenv shell

Now install the dependencies and tests:

pip install -e '.[test]'

To run the tests:

pytest