Graphene-sqlalchemy:如果子关系表中有任何数据量,查询将无法返回

时间:2019-07-12 18:07:31

标签: python sqlalchemy graphene-python

在一对多的情况下,如果您具有如下所示的表设置(非常简单的一对多关系),则如果tableB具有任何实际数据量,则GraphQL查询将超时。

TableB总共约有40万条记录。 Graphene-sqlalchemy将查询TableA,然后当石墨烯对其进行调用时,SQLAlchemy本身将尝试解析表的关系。发生这种情况时,查询将发送到数据库,但不会在足够的时间内返回(它回退〜1GB的数据,因为它试图拉出子表上的每个单个字段)。

我将其范围缩小到了石墨烯/types/resolver.py

def attr_resolver(attname, default_value, root, info, **args):
    return getattr(root, attname, default_value)

石墨烯捕获TableA信息,然后在解析TableB时,将使用{TableA”模型填充root参数,SQLAlchemy然后尝试完全解析40万条记录,查询超时然后失败。 / p>

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

0 个答案:

没有答案