graphql-python / graphene-sqlalchemy

Graphene SQLAlchemy integration
http://docs.graphene-python.org/projects/sqlalchemy/en/latest/
MIT License
980 stars 226 forks source link

ORMField batching results in null result #401

Open odfalik opened 8 months ago

odfalik commented 8 months ago

I'm trying to get batching set up on a 1:N relationship. Suppose a Foo has many Bars

class FooObject(SQLAlchemyObjectType):
    class Meta:
        model = Foo
        interfaces = (graphene.relay.Node,)

    bars = ORMField(batching=True)

(I've also tried doing batching=True in the Meta)

class Query(graphene.ObjectType):
    test_query_batching = graphene.Field(
        lambda: graphene.List(FooObject),
    )

    def resolve_test_foo_query_batching(self, info):
        return Foo.query.limit(5).all()

Querying this resolver as such

query TestQueryBatching {
  testQueryBatching {
    id
    bars {
      edges {
        node {
          id
        }
      }
    }
  }
}

results in Cannot return null for non-nullable field BarObjectConnection.edges. This query succeeds if batching is disabled. I'm unsure as to why we'd be getting null for BarObjectConnection.edges, though. Any ideas as to what might be leading to this?

Versions:

davidmcnamee commented 7 months ago

Not sure what the bug is here, but this temporary workaround seemed to do the trick for me:

def execute(schema, query: str):
    """
    Temporary workaround for https://github.com/graphql-python/graphene-sqlalchemy/issues/401
    Use `execute(schema, query)` instead of `schema.execute(query)`
    """
    return asyncio.run(
        graphql(
            schema.graphql_schema,
            source=query,
            context_value={},
        )
    )

based on this code