当使用外部数据库从多个表中获取数据时,使用GraphQL和Django的最佳方法是什么(即,创建一个表示数据的Django模型不会对应于我的数据库中的单个表)?
我的方法是暂时放弃使用Django模型,因为我认为我还没有完全理解它们.(我对Django和GraphQL都是新手.)我已经设置了一个带有连接外部Postgres DB的应用程序的简单项目.我遵循了Graphene Django教程中的所有设置,然后在我意识到我创建的模型是几个表的混合物时遇到了障碍.
我有一个查询,它发送回映射到我的模型中的字段的正确列,但我不知道如何使这成为一个动态连接,以便当我的API被命中时,它查询我的数据库并将行映射到模型我在Django中定义的模式.
我的方法是避免使用模型,并使用Steven Luscher的演讲中展示的更简单的方法:在30分钟内实现Zero to GraphQL.
TLDR;
目标是能够访问我的GraphQL端点,使用我的django.db.connection中的游标对象来获取应该解析为OrderItemTypes的GraphQLList的字典列表(见下文).
问题是,当我使用查询命中以下端点时,我为每个值获取空值:
localhost:8000/api?query={orderItems{date,uuid,orderId}}
Run Code Online (Sandbox Code Playgroud)
收益:
{ "data":{ "orderItems":[ {"date":null, "uuid":null, "orderId":null }, ... ] } }
Run Code Online (Sandbox Code Playgroud)
project/main/app/schema.py
import graphene
from django.db import connection
class OrderItemType(graphene.ObjectType):
date = graphene.core.types.custom_scalars.DateTime()
order_id = graphene.ID()
uuid = graphene.String()
class QueryType(graphene.ObjectType):
name = 'Query'
order_items = graphene.List(OrderItemType)
def resolve_order_items(root, args, info):
data = get_order_items()
# data prints out properly in my terminal
print data
# data does not resolve properly
return …
Run Code Online (Sandbox Code Playgroud)