我使用 Strawberry for GraphQL 以及 FastAPI 和 SQLAlchemy。我在 MySQL 中有大约 20 个表。我正在使用 SQLAlchemy 进行模型(继承
DeclarativeBase
)。对于草莓模型,我使用 strawberry-sqlalchemy-mapper
。我可以编写第三层模型作为过滤器(@strawberry.input
),但这听起来不太好。
我遇到过以下问题:
Query
);@strawberry.input
-> )。我需要类似于上图代码的东西,这样我就可以使用一些参数编写 GraphQL 查询并获得没有错误的响应。我想检索客户端请求参数的类似字典的数据并对其进行处理,而不是手动定义每个参数。我可以使用
Info
对象,但是 Strawberry 仍然不会跳过未定义的参数
我还没有研究过石墨烯或Ariadne是如何工作的,有没有办法解决这个问题?
这在草莓中是可能的。它需要使用较低级别的 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!]!
}