Flask-SQLAlchemy批量插入数据性能下降排查处理

2022年11月3日16:00:00 发表评论 1,206 ℃

之前我阿汤博客写过一篇文档《Flask-SQLAlchemy批量插入数据性能测试》,当时对几种批量插入Mysql数据库的方法做了性能比较。

只要不是通过for循环一条条插入,另外几种方法都比较快的,一万条数据也就0.6s左右。

但是最近我在做一个通过导入Excel或者csv文件,然后把数据批量写入数据库功能,使用bulk_insert_mappings方法发现性能下降挺厉害。

一共7600条数据,写入数据库的时间要20-30s左右,字段也才十多个。

经过了五六个小时的测试,这个过程就不赘述了,更换了各种方法、各种姿势。下面分享给大家,希望对看到这篇文章的人有帮助。

主要原因就是因为同一个字段里面同时存在str和None的原因导致。

因为导入文件里面有几列时间,数据库字段datetime类型不允许插入空值,所以我把文件里面时间字段空值都替换成了None,然后就出现了插入数据库性能下降的问题。

如果全部为str或者全部为None写入性能没有影响。

解决方案就是要么更改数据库字段datetime类似为varchar,或者文件时间为空时给一个默认时间,不要替换为None。

最后测试写入7600条数据到MySQL基本耗时在1-2s。

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: