在解析器函数中设置**kwargs之类的参数

问题描述 投票:0回答:1

我使用 Strawberry for GraphQL 以及 FastAPI 和 SQLAlchemy。我在 MySQL 中有大约 20 个表。我正在使用 SQLAlchemy 进行模型(继承

DeclarativeBase
)。对于草莓模型,我使用
strawberry-sqlalchemy-mapper
。我可以编写第三层模型作为过滤器(
@strawberry.input
),但这听起来不太好。

我遇到过以下问题:

  • 如果不在 Strawberry 解析器中设置每个参数,就无法在客户端查询中使用未确定的参数(服务器端
    Query
    );
  • 无法创建通用 Filter 类(基于
    @strawberry.input
    -> GPT Generated Example)。

我需要类似于上图代码的东西,这样我就可以使用一些参数编写 GraphQL 查询并获得没有错误的响应。我想检索客户端请求参数的类似字典的数据并对其进行处理,而不是手动定义每个参数。我可以使用

Info
对象,但是 Strawberry 仍然不会跳过未定义的参数

我还没有研究过石墨烯或Ariadne是如何工作的,有没有办法解决这个问题?

python graphene-python strawberry-graphql ariadne-graphql graphql-python
1个回答
0
投票

这在草莓中是可能的。它需要使用较低级别的 API,模拟

strawberry.field
对参数的作用。这是一个最小的例子:

import strawberry
from strawberry.annotation import StrawberryAnnotation
from strawberry.arguments import StrawberryArgument


# no @strawberry.type yet
class Query:
    @strawberry.field
    def dynamic(self, **kwargs: object) -> list[str]:
        return list(kwargs)


fields = {'x': int, 'y': str}  # from a dynamic schema
Query.dynamic.base_resolver.arguments = [
    StrawberryArgument(name, name, StrawberryAnnotation(fields[name])) for name in fields
]
schema = strawberry.Schema(strawberry.type(Query))
% strawberry export-schema ...
type Query {
  dynamic(x: Int!, y: String!): [String!]!
}
© www.soinside.com 2019 - 2024. All rights reserved.