CSV 数据到 GraphQL 架构

CSV data to GraphQL schema

我有不同 headers 的 CSV 数据。我事先不知道这些headers。如何将此数据转换为 GraphQL 模式?

示例查询:

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

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

预期查询结果:

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

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

使用石墨烯的示例类型:

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)

当您事先不知道 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 文件的全部内容。希望这为您指明了如何为查询结果填充这样的结构的正确方向。