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