Как вы пишете распознаватель, который возвращает SQLAlchemy в качестве соединения ретрансляции? - PullRequest
0 голосов
/ 07 мая 2018

Я хотел бы вернуть ретрансляционное соединение для запросов. Используя стандартный графен-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.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Я получил другое решение.

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

class RootQuery(graphene.ObjectType):
    find_users = SQLAlchemyConnectionField(UserQLSchema, target=graphene.String())

def resolve_find_users(self, info, **kwargs):
    return search_users(self, info, **kwargs)

Может помочь вам.

0 голосов
/ 02 июля 2018

У меня есть идея.

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)

В то время как возникает другая проблема, приводящая к тому, что база данных запрашивает дважды для каждого сетевого запроса.

...