graphql-python / graphql-python/graphene-django

`select_related` and `prefetch_related`

Open
#57 37 comments 84 reactions 0 assignees View on GitHub
📖 documentation help wanted wontfix
Dominant language
Python
Stars
4.4k
Forks
760
PR merge metrics
No merged PRs in 30d

Description

When I inspected the actual SQL queries being run against DB, I found that for foreignkey and manytomany relationships, we have the `n+1` problem.

For example, suppose there are 5 teams, each with 11 members, this query:
```
query {
teams {
edges {
node {
members {
edges {
node {
name
}
}
}
}
}
}
}
```
will result in 1 query for selecting `teams`, and 5 more queries for selecting members of each team. 6 queries in total.

Normally, we would do a query like this `Team.objects.all().prefetch_related('members')` to reduce to 2 queries.

I think it would be extremely beneficial if `DjangoObjectType` can detect special fields:
- ForeignField
- OneToOneField
- OneToManyField
- ManyToManyField
and apply appropriate `prefetch_related` and/or `select_related` when such fields are present in graph queries.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.