我想为查询返回一个中继连接。使用标准的 graphene-sqlalchemy 你可以这样做:
class Query(graphene.ObjectType):
node = relay.Node.Field()
all_users = SQLAlchemyConnectionField(User)
对于需要更多自定义搜索的各种地方,最简单的方法是自定义解析器:
class Query(graphene.ObjectType):
node = relay.Node.Field()
all_users = graphene.List(User)
def resolve_all_users(self, info, **args):
# Grab the root SQLAlchemy query
query = User.get_query(info)
return query.filter(
User.active,
# and possibly a whole bunch of other filters)
).options(joinedload(User.emails).all()
这可行,但它返回一个简单的用户列表,不支持分页或 SQLAlchemyConnectionField 处理的其他中继连接技巧。我正在寻找的是一种返回查询的方法,并以与 SQLAlchemyConnectionField 类似的方式自动处理它。
最佳答案
我有一个想法。
def search_users(cls, info, **kwargs):
user_query = UserQLSchema.get_query(info)
target = kwargs.get('target')
if target:
target_like = "%{}%".format(target)
user_query = orga_query.filter(UserModel.name.like(target_like))
return user_query.all()
class RootQuery(graphene.ObjectType):
find_users = graphene.relay.ConnectionField(OrganizationFullConnection, target=graphene.String(), resolver=search_users)
同时,会引发另一个问题,导致每次网络请求都要查询数据库两次。
关于sqlalchemy - 您如何编写一个返回 SQLAlchemy 作为中继连接的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50208761/