使用 Python 将数百万条记录插入 MySQL 数据库

Inserting millions of records into MySQL database using Python

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

的 10% 到 15%

任何处理如此大的数据并将其有效插入数据库的建议,将不胜感激。

谢谢。

将行插入 table 的最快方法是使用 LOAD DATA INFILE 语句。

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

执行单独的 INSERT 语句一次插入一行,RBAR(逐行痛苦)非常慢,因为数据库的所有 工作 必须经过执行语句...解析语法,语义,准备执行计划,获取和释放锁,写入二进制日志,...

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

  INSERT INTO mytable (fee, fi, fo, fum) VALUES 
   (1,2,3,'shoe')
  ,(4,5,6,'sock')
  ,(7,8,9,'boot') 

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

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

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

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

最近尝试这样做,我发现了一个快速的方法,但这可能是因为我正在使用 AWS Windows 服务器到 运行 python 从那里有一个快速连接到数据库。但是,不是一个文件中有 100 万行,而是多个文件加起来达到 100 万行。它比我测试过的其他直接数据库方法要快。

通过这种方法,我能够按顺序读取文件,然后 运行 MySQL Infile 命令。然后我也在这个过程中使用了线程。对将 100 万行导入 MySQL.

花费 20 秒的过程进行计时

免责声明:我是 Python 的新手,所以我想看看我能把这个过程推进到什么程度,但它导致我的 DEV AWS-RDS 数据库变得没有响应(我不得不重新启动它),因此最好采用不会淹没流程的方法!