sqlalchemy - 您如何编写一个返回 SQLAlchemy 作为中继连接的解析器?

标签 sqlalchemy graphene-python

我想为查询返回一个中继连接。使用标准的 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/

相关文章:

python - 属性错误 : 'unicode' object has no attribute '_sa_instance_state'

python - 如何使用 Python 使用 Github GraphQL API?

python - graphene-django - 如何过滤?

python - Graphene-Django 和模型属性

python - 在 Flask 中使用 SQLAlchemy 创建数据库

python - SQLAlchemy:如何通过对象的 PK 从关系中获取对象?

django - Graphene-Django : Concepts of Connections, 边缘和节点

python - 如何修复 'Meta.fields'不得包含非模型字段名称: username for django graphene authentication endpoint

sql - 无法使用 pyodbc 将 Sqlalchemy 连接到 SQL Server 2000

python - sqlalchemy 不强制执行外键约束