调用接口拿到的数据rows,有很多行,每一行又有很多key-value pair,一开始代码是遍历第一行,每一对key-value,key作为建表时的列名,value的类型决定了该列在mysql中的类型
之后出现问题,表能建,但是插入数据时列的个数和value的个数对不上,比如,rows的第一行可以正常插入,但是第二行就插入不了,因为rows[1]里多出来一个key,所以在建表时不能只根据rows的第一行去建表。
于是遍历rows的所有行,并把过程中生成的建表的query放到set里去重,再去执行sql语句,又报错,重复列名"remark"。
怎么回事呢?不是已经去重了吗?经过排查发现,因为同样一个key remark,它对应的value可能类型不一样,这就导致同样都是remark,生成的建表query是不一样的,而set里存放的是建表query而不是单单key,所以不会被去重
目前能想到的解决方法只有遇到重复的key就去掉,只保留一个了
或者搞一个hashmap,key就是列名,value是一个list,里面存放这个列名可能的类型,比如INTEGER,VARCHAR(255)。Hashmap在python中就是字段,dict。
去重后又遇到了问题,还是这个remark的key,现在是value太长了,推测是因为remark本来对应了两种数据类型,但因为去重只保留了第一次遇到的数据类型,结果插入数据时遇到的是第二种数据类型,于是出现了长度冲突,最后决定不要remark这个字段了,直接跳过