微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python - fastapi - graphene - sql alchemy - 无法查询关系列

如何解决python - fastapi - graphene - sql alchemy - 无法查询关系列

sqlalchemy 模型

class AssetAssignment(base_model.BaseModel,Base):
    __tablename__ = "asset_assignment"

    id = Column(Integer,ForeignKey('page_asset.asset_assignment_id'),primary_key=True,index=True,name="id")
    asset_type_id = Column(Integer,nullable=False,name="asset_type_id")
    asset_id = Column(Integer,ForeignKey('asset.id'),name="asset_id")
    status = Column(Integer,name="status",default=1)
    public=Column(Integer,nullable=True,name="public",default=1)

class Page(Base):
    __tablename__ = "page"

    id = Column(Integer,name="id")
    page_id = Column(Integer,name="page_id")
    asset_assignment_id = Column(Integer,name="asset_assignment_id")
    asset_assignment=relationship("AssetAssignment",lazy='joined',uselist=True)

尝试通过 graphql 访问上述内容

class Asset(sqlAlchemyObjectType):
    class Meta:
        model = Page
        interfaces = (relay.Node,)

class Query(graphene.ObjectType):
    all_assets= graphene.List(Asset)
  def resolve_all_assets(self,info):
        query = Asset.get_query(info)  # sqlAlchemy query
        return query.all()

结果没有“asset_assignment”字段,它是一个关系列。

Graphql 查询

{
  allAssets{
   asset_assignment
  }
}

结果

{
  "data": null,"errors": [
    {
      "message": "Cannot query field \"asset_assignment\" on type \"Asset\". Did you mean \"assetAssignmentId\"?","locations": [
        {
          "line": 39,"column": 4
        }
      ]
    }
  ]
}

解决方法

SQLAlchemyConnectionField 帮助获取关系列

all_assets= SQLAlchemyConnectionField(Page.connection)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。