graphql-python / graphql-python/graphene-sqlalchemy

Queries fail to return if sub-relation table has real world amount of data

未关闭
#237 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
985
派生
223
PR 合并指标
30 天内没有已合并 PR

描述

In a one to many if you have a table setup as follows (a very simple one to many relationship), the GraphQL query will timeout if tableB has any real world amount of data.

TableB has about 400k records in total. Graphene-sqlalchemy will query for TableA, and then SQLAlchemy itself will try resolve the relationship of the table when graphene calls for it. When this happens the query is sent to the DB but it won't return in enough time (its pulling back ~1GB of data as it tries to pull every single field on the sub table).

I've narrowed it down to graphene/types/resolver.py

```
def attr_resolver(attname, default_value, root, info, **args):
return getattr(root, attname, default_value)
```
Graphene captures the TableA information, and then when TableB get resolved, the `root` parameter is populated with the "TableA" model, which SQLAlchemy then tries to completely resolve 400k records, query times out and then fails.

```
query{
tableA(first: 10){
edges{
node{
tableB(first: 5){
edges{
node{
fieldA
}
}
}
}
}
}
}
```

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。