Psycopg2、Postgresql、Python:最快的批量插入方法
我想找一种最有效的方法,把几百万条数据批量插入到数据库里。我使用的是Python、PostgreSQL和psycopg2这个库。
我已经准备了一长串要插入数据库的数据,有时候还会加上一些修饰,比如几何图形的Simplify
。
最简单的方法就是把一系列的INSERT
语句拼成字符串,但我还听说过另外三种方法:
- 使用
pyformat
绑定风格进行参数化插入 - 对这串数据使用
executemany
方法 - 把结果写入文件,然后使用
COPY
命令。
看起来第一种方法是最有效的,但我希望能得到你们的建议和代码示例,告诉我怎么做才对。
9 个回答
10
根据我的经验,executemany
并没有比自己手动执行很多插入操作更快。最快的方法是自己把多个值格式化成一个单独的 INSERT
语句。也许将来 executemany
会有所改进,但目前来说,它的速度还是比较慢的。
我创建了一个 list
的子类,并重写了 append 方法,这样当列表达到一定大小时,我就会格式化 INSERT
语句来执行。
11
有一个新的psycopg2手册,里面包含了所有选项的示例。
COPY选项是效率最高的。其次是executemany。最后是使用pyformat的execute。
17
是的,我会选择COPY,前提是你能把文件写入到服务器的硬盘上(而不是应用程序运行的那个硬盘),因为COPY只会从服务器上读取数据。