首先,我们建立如下的数据库,用于后续的测试:
列名 |
类型 |
id(主键) |
bigint |
random_value |
bigint |
随机生成20000条数据,用于后续测试:
注意: 使用excutemany(sql, list)
批量插入时,List中数据类型必须为Tuple元组
eg. [(0, 3132), (1, 1298), (2, 6543), (3, 4553) ……]
1.使用execute()逐行插入
结果
2.使用executemany()批量插入
executemany()用法
在数据库连接后,使用cursor.excutemany(sql, list)执行批量插入,其中sql为数据库SQL语句,其中的变量可以写为%s;list为要插入数据库的元组列表,其中的元组元素依次与SQL语句中的%s对应。
注意: List中数据类型必须为Tuple元组 eg.[(0, 3132), (1, 1298), (2, 6543), (3, 4553) ……]
实现
结果
3.总结
方法 |
数据量 |
耗时 |
execute() |
20000 |
13.6468353 秒 |
executemany() |
20000 |
0.1756037 秒 |
显然,使用**executemany()的效率要比使用execute()好太多了。在插入大量数据时,当然优选executemany()**批量插入。
注意:当executemany与ON DUPLICATE KEY UPDATE一起使用
此时,不能在SQL语句中ON DUPLICATE KEY UPDATE
后面的部分继续使用%s
表示变量
eg.
这种常规方式书写的话,executemany()将会报以下错误:
TypeError: not all arguments converted during string formatting.
正确的方法如下
使用value(columnName)
表示变量