昨天在过滤一张表,插入到另外一张表的时候,由于有 1200 万条需要插入的数据,不得不找一找批量插入的方法。在此记录一下,以防以后再用到。

本质上,就是要最后生成这种,一次插入批量的 SQL

1
INSERT INTO 表名称 VALUES (值1, 值2,....)

在 SQLAlchemy 中,如果使用connection.execute()的话,就是这么一句话:

1
2
3
conn.execute(MyTable.insert(), [{'color': 'blue'},
{'color': 'red'},
{'color': 'green'}])

构造一个由字典组成的 list。

实际使用的时候,注意控制一下这个 list 的大小。别吃爆了内存。同时也防止 MySQL 单个请求过大的问题。

实际简单记了一下速度,没批量之前,每分钟只能插入 2.5 万条左右。改成批量插入,一次插入 10000 条,速度达到 80 万/分钟。效果十分明显。