因工作需要,从第三方平台下载统计数据到公司内部数据库。
最好的路径应该是:
1、利用第三方OpenAPI直接获取数据;
2、和自己数据库中的数据比较,看哪些需要同步
3、有需要同步的,则同步过来
但是,咨询并查阅第三方OpenAPI后发现,没有统计数据可下载。
那就改变一下:
1、手工下载统计数据 -- zip文件到本地
2、后续同步过程使用Go代码写的工具去实现
2.1、检查zip文件时间和本地数据库时间,如果大于数据库最新数据时间,则需要同步
2.2、如果需要同步,则解压zip文件,生成csv文件。
2.3、同步csv文件到本地数据库对应的表。但有个坑:csv文件title和行实际数据不一定一致。
需要每行检查并纠正。
2.4、数据库中有和csv文件对应的模板表,从模板表创建对应的数据表。
2.5、把csv对应的行数据insert into对应的表--中间表
3、检查本地数据库中间表,检查是否需要实际插入目标表。如果有则插入。
因为数据必须完整,故所有数据库操作采用事务方式处理。
本工具暂时只有处理最新zip文件,和最新中间表。并没有做到处理所导出数据zip文件,没有检查所有本地中间表文件。待优化,不过因为一周只需要执行一次,故暂时满足使用了。
主函数如图:
数据中间表to目标表:
GoLang的数组参数是值传递的,复制副本成本高。而其它复合类型,map,slice等都是指针传递的。
mysql事务,通过sql.DB的begin()得到sql.TX对象。事务对象通过Commit()或Rollback()释放。
好了,以后不用手工同步数据了,只需要每周一次的手工下载统计文件。
很容易打包成exe文件。发布这这方面还是比Python方便一点。
工作中,好多手工都尽量工具化。提高工作效率。
我是【天问火星人】,又名【程序员黑洞】,一个程序员。正在学GoLang,用GO给自己写效率工具。 欢迎关注我,欢迎留言交流。
领取专属 10元无门槛券
私享最新 技术干货