换种思路解决:sqlalchemy.exc.StatementError : exception str() failed

首先介绍下这个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的原因再更新到这个文里。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值