def type_fields(schema, row):
missing_values = []
if 'missingValues' in schema._Schema__descriptor:
missing_values = schema._Schema__descriptor['missingValues']
typed_row = []
for index, field in enumerate(schema.fields):
value = row[index]
if field.type == 'geojson':
if value == '' or value == 'NULL' or value == None:
value = None
else:
value = literal_column("ST_GeomFromGeoJSON('{}')".format(value))
elif field.type == 'string' and 'None' not in missing_values and value == 'None':
value = 'None'
elif field.type == 'string' and value.lower() == 'nan':
value = value # HACK: tableschema-py 1.0 fixes this but is not released yet
elif field.type == 'array' or field.type == 'object':
if value in missing_values:
value = None
else:
value = literal_column('\'' + value + '\'::jsonb')
else:
try:
value = field.cast_value(value)
except InvalidObjectType:
value = json.loads(value)
if isinstance(value, datetime):
value = literal_column("'" + value.strftime('%Y-%m-%d %H:%M:%S') + "'")
elif isinstance(value, date):
value = literal_column("'" + value.strftime('%Y-%m-%d') + "'")
if value is None:
value = literal_column('null')
typed_row.append(value)
return typed_row
评论列表
文章目录