A GraphQL endpoint for Datasette
Project description
datasette-graphql
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 sets up /graphql
as a GraphQL endpoint for the first attached database.
Querying for tables and columns
Individual tables can be queried like this:
{
repos {
nodes {
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 {
nodes {
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"]) {
nodes {
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.
Sorting
You can set a sort order for results from a table using the sort:
or sort_desc:
arguments. The value for this argument should be the name of the column you wish to sort (or sort-descending) by.
{
repos(sort_desc: stargazers_count) {
nodes {
full_name
stargazers_count
}
}
}
Pagination
By default the first 10 rows will be returned. You can control this using the first:
argument.
{
repos(first: 20) {
totalCount
pageInfo {
hasNextPage
endCursor
}
nodes {
full_name
stargazers_count
license {
key
}
}
}
}
The totalCount
field returns the total number of records that match the query.
Requesting the pageInfo.endCursor
field provides you with the value you need to request the next page. You can pass this to the after:
argument to request the next page.
{
repos(first: 20, after: "134874019") {
totalCount
pageInfo {
hasNextPage
endCursor
}
nodes {
full_name
stargazers_count
license {
key
}
}
}
}
The hasNextPage
field tells you if there are any more records.
Search
If a table has been configured to use SQLite full-text search you can execute searches against it using the search:
argument:
{
repos(search: "datasette") {
totalCount
pageInfo {
hasNextPage
endCursor
}
nodes {
full_name
description
}
}
}
The sqlite-utils Python library and CLI tool can be used to add full-text search to an existing database table.
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:
- 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file datasette-graphql-0.3.tar.gz
.
File metadata
- Download URL: datasette-graphql-0.3.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e96ef3fc37bedf1dec7be418ad55a4443dff0168a507cb22eb87281f424a31e5 |
|
MD5 | 3bead3fd5f879022368a186f0f18a276 |
|
BLAKE2b-256 | a606ae405c2246d35aeb2e056e39c82e98623ee2e42530708f6180b039461721 |
File details
Details for the file datasette_graphql-0.3-py3-none-any.whl
.
File metadata
- Download URL: datasette_graphql-0.3-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e2af02e971686c3a70990b28b2ea8a8e8bd6d142f89cb2121d1c6466bee81e1 |
|
MD5 | 6ca285773e66630a354f18f3a6bc0b5c |
|
BLAKE2b-256 | b03681b59f9a68064d3ec246d49cf7911363fc8ffb2389a0ec90e6a8ba9a1417 |