CSV数据到GraphQL模式

问题描述 投票:1回答:1

我有CSV数据,有不同的标题。我事先并不知道这些头信息。我如何将这些数据转换为GraphQL模式?

示例查询。

csvData(supplierId: $supplierId) {
      columns {
        id
      }
      rows {
        id
        columns {
          id
          value
        }
      }
    }

我希望能够查询文件中的列和行。

预期的查询结果。

列: {id: 0, value: Name} {id: 1, value: Age}, {id: 2, value: Location}

Rows: {id: 0, columns: {id: 0, value: Mary}}, {id: 0, columns: {id: 1, value: 21}, {id: 0, columns: {id: 2, value: NYC}}

使用graphene的类型示例:我有一个CSV数据,有不同的标题。

class Columns(object):
    id: int = Int(required=True)
    value: str = String(required=True)


class Rows(object):
    id: int = Int(required=True)
    columns: Columns = Columns(required=True)
json graphql graphql-js graphene-python
1个回答
0
投票

当你事先不知道GraphQL的结构时,你可以使用列表结构作为变通方法。 一个CSV文件就是一个行的列表,一行就是一个键值对。

首先在结构中定义每个单元格的值,像这样。

class ColumnValueType(graphene.ObjectType):
    column_name = graphene.String(required=True)  #  this is column heading
    value = graphene.String(required=True)  #  you don't know the value type you have to assume string

然后把你的行定义为一个列值列表

class RowType(graphene.ObjectType):
    row = graphene.List(ColumnValueType)

和CSV数据作为一个行列表。

class CSVDataType(graphene.ObjectType):
    rows = graphene.List(RowType)

这一切都有点笨拙,但这样的东西应该可以容纳CSV文件的全部内容。 希望这为你指明了如何为查询结果填充这样的结构的正确方向。

© www.soinside.com 2019 - 2024. All rights reserved.