psycopg2 数据批量插入问题记录
由于最近用到greenplum
,需要进行一些数据库批量插入操作,由于其操作方式与postgresql
相同,因此采用的是psycopg2(2.8.4)
做底层驱动。
由于数据量较大,所以采用了批量插入操作,也就是其自带的executemany
,从名字来看会给我们其真的是批量插入的错觉(搜了下,大部分搜索结果也是说批量插入使用该操作,坑~(⊙﹏⊙)),但是,实际执行时发现插入速度过慢,觉得很奇怪,通过
SELECT
*
FROM
pg_stat_activity
WHERE
usename = 'your-use-name'
AND xact_start IS NOT NULL
查看实际执行情况,发现其最终还是单条数据执行插入,这不是坑嘛,难怪慢,对psycopg2
源码进行查看,发现其extras.py
模块有个execute_values
方法,这个才是真正的执行批量操作,然后就替换了,速度就哐哐哐上来了,over~
参考:
1. Postgresql实用技巧