首先介绍下这个bug的背景:
使用pandas.to_sql()函数往Mysql里导入123万行数据的时候出的bug。
在网上找了找,没找到怎么解决的,于是自己尝试。
我的解决历程:
【1】首先我觉得出现这个bug是某个字段有问题,可能字段的数据类型和数据库表中的字段的数据类型不一致,于是尝试先使用10条数据,可以顺利执行,那说明字段数据类型和数据库表设置的字段数据类型应该是没问题的。
【2】接着跑全量数据还是同样的bug。
【3】我考虑会不会是后面有某几条数据的某几个字段的值太异常了,为此我还特意把数据库表的字段长度都调大了一些,然后尝试前10万行导入,可以顺利执行。
【4】又跑全量数据还是同样的bug。
【5】我还是认为是后面某几条数据的某几个字段的值异常,于是分别尝试了20万、30万、40万、60万、120万,都是可以顺利执行的。于是我肯定的认为是后面的3万条数据某些值异常,于是单独拎出来执行这些数据,但是这些数据竟然也可以顺利执行。
【6】既然所有数据都没问题,执行全量试试吧,毫无疑问全量还是报错。
【7】123万分成120万+3万2批执行都没问题,于是我就换个思路试下分批执行吧,把123万分成n批进行执行。在to_sql里加入chunksize=100000这个参数,设置成一批执行10万条,然后焦急地等待结果。竟然顺利执行了。
总结一下,sqlalchemy.exc.StatementError : <exception str() failed>最后我还是不知道这个BUG出现的原因和直接解决方法,但是我用了另外一种方法来代替,即分批执行。后面如果我搞懂了这个BUG的原因再更新到这个文里。