【发布时间】:2021-11-03 04:28:27
【问题描述】:
我正在使用 Graphene 和 SqlAlchemy 为咖啡馆订购应用程序构建 GraphQL 查询。到目前为止,我的查询主要是基于“加入”和“过滤”,但我现在需要向咖啡馆提供客户详细信息,包括客户光顾他们商店的次数和客户每次光顾的平均消费。所以我需要在我的 Graphene/SqlAlchemy 查询中使用 group_by、func.count 和 func.sum。这些查询已经足够成功了。但是,我不确定如何将 Graphene/SqlAlchemy 查询转换为 GraphQL 查询。
这是我的 Graphene/SqlAlchemy 查询。
cafe_customers = db.query(models.Customer.username, func.count(models.Order.ordered_by), func.sum(models.Order.price)).join(models.Order, models.Customer.id == models.Order.ordered_by).filter(models.Order.cafe_id == current_user).group_by(models.Customer.id).all()
这是我的 GraphQL 查询(我非常不确定如何进行)。
{
customersByCafe(token: "") {
username
}
}
这是 GraphQL 返回的内容。
{
"data": {
"customersByCafe": [
null,
null
]
},
"errors": [
{
"message": "Received incompatible instance \"('dave', 1, Decimal('11.00'))\"."
},
{
"message": "Received incompatible instance \"('geoff', 2, Decimal('50.00'))\"."
}
]
}
这里有一个类似的问题,与“在 graphql 查询中接收不兼容的实例”有关,解决方案是将 graphene.Field 更改为 graphene.List。我的查询设置为 graphene.List 并且我使用了不同的选项。注意到 GraphQL 正在向我返回我需要的数据,即按用户名分组的每个客户、他们对帐户登录的咖啡馆的总访问次数的整数和总支出的小数,数据存在明显错误没有以我可以在前端使用的方式返回。
看来我的问题在于我不知道如何将 Graphene/SqlAlchemy 转换为 GraphQL。我该怎么做呢?
【问题讨论】:
标签: sqlalchemy graphql graphene-python