首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python将数百万条记录插入到MySQL数据库中

问使用Python将数百万条记录插入到MySQL数据库中
EN

Stack Overflow用户
提问于 2015-06-19 09:55:42
回答 3查看 12.4K关注 0票数 4

我有一个包含大约1亿条记录(数字)的txt文件。我在python中读取此文件,并使用Python中的简单insert语句将其插入到MySQL数据库中。但是它花费了很长的时间,看起来脚本永远不会完成。执行此过程的最佳方式是什么?该脚本使用了不到1%的内存和10%到15%的CPU。

任何建议,以处理如此庞大的数据,并有效地插入到数据库中,将非常感谢。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-19 12:56:51

坚持使用python,您可能希望尝试从您的输入创建一个元组列表,并使用python mysql连接器中的execute many语句。

如果文件太大,您可以使用生成器将其分块为更易于消化的文件。

http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html

票数 2
EN

Stack Overflow用户

发布于 2015-06-19 10:06:01

向表中插入行的最快方法是使用LOAD DATA INFILE语句。

参考:https://dev.mysql.com/doc/refman/5.6/en/load-data.html

使用单个INSERT语句一次插入一行,RBAR (逐行插入)非常缓慢,因为数据库执行一条语句需要完成所有的工作……解析语法、语义、准备执行计划、获取和释放锁、写入二进制日志……

如果必须执行insert语句,那么可以使用MySQL多行插入,这样会更快。

代码语言:javascript
复制
  INSERT INTO mytable (fee, fi, fo, fum) VALUES 
   (1,2,3,'shoe')
  ,(4,5,6,'sock')
  ,(7,8,9,'boot') 

如果一次插入四行,则需要执行的语句数量减少了75%。

票数 6
EN

Stack Overflow用户

发布于 2018-10-26 17:48:55

最近我尝试过这样做,我找到了一种快速的方法,但这可能是因为我正在使用AWS Windows服务器来运行python,该服务器可以快速连接到数据库。然而,不是在一个文件中有一百万行,而是多个文件加起来有一百万行。不管怎样,它比我测试的其他直接DB方法更快。

使用这种方法,我可以按顺序读取文件,然后运行MySQL Infile命令。然后我在这个过程中也使用了线程。对进程进行计时将100万行数据导入MySQL需要20秒的时间。

免责声明:我是Python的新手,所以我试着看看我可以将这个过程推进到什么程度,但它导致我的DEV AWS-RDS DB变得没有响应(我不得不重新启动它),所以采取一种不会压倒这个过程的方法可能是最好的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30928713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档