Psycopg2、Postgresql、Python:最快的批量插入方法

47 投票
9 回答
45468 浏览
提问于 2025-04-15 19:20

我想找一种最有效的方法,把几百万条数据批量插入到数据库里。我使用的是Python、PostgreSQL和psycopg2这个库。

我已经准备了一长串要插入数据库的数据,有时候还会加上一些修饰,比如几何图形的Simplify

最简单的方法就是把一系列的INSERT语句拼成字符串,但我还听说过另外三种方法:

  1. 使用pyformat绑定风格进行参数化插入
  2. 对这串数据使用executemany方法
  3. 把结果写入文件,然后使用COPY命令。

看起来第一种方法是最有效的,但我希望能得到你们的建议和代码示例,告诉我怎么做才对。

9 个回答

10

根据我的经验,executemany 并没有比自己手动执行很多插入操作更快。最快的方法是自己把多个值格式化成一个单独的 INSERT 语句。也许将来 executemany 会有所改进,但目前来说,它的速度还是比较慢的。

我创建了一个 list 的子类,并重写了 append 方法,这样当列表达到一定大小时,我就会格式化 INSERT 语句来执行。

11

有一个新的psycopg2手册,里面包含了所有选项的示例。

COPY选项是效率最高的。其次是executemany。最后是使用pyformat的execute。

17

是的,我会选择COPY,前提是你能把文件写入到服务器的硬盘上(而不是应用程序运行的那个硬盘),因为COPY只会从服务器上读取数据。

撰写回答