假设我们有一个简单的graphql查询:
query EventQuery {
event(id: 1) {
id
name
description
}
}
我们的解决方法是这样的:
def resolve_event(self, info, id):
event = (Event.get_query(info).filter_by(id=id).options(db.load_only('id', 'name'))).first()
return event
或
def resolve_event(self, info, id):
event = db.session.query(EventModel).filter_by(id=id).options(db.load_only('id', 'name')).first()
return event
在两种情况下,解析程序都将返回ID,名称和描述,db.load_only根本不起作用。我在做什么错了?
答案 0 :(得分:0)
摘自load_only
文档:
指示对于特定实体,仅应加载给定的基于列的属性名称列表;所有其他人都将被推迟。
此处“延迟”表示其余列将被延迟加载;因此,在您的情况下,如果有人曾经调用event.description
,则此时将发出一个单独的SQL查询,以从数据库中加载描述列。
正确的解决方案实际上取决于您在下一层处理的内容:如果您希望GraphQL查询返回可在python中使用的SQLAlchemy实体,那么当前行为可能正是您想要的-只是不要在您的代码中访问event.description
。如果您要构建返回JSON或类似内容的API,则还需要告知序列化层要从event
实体中提取哪些列。