使用SQLAlchemy bulk_insert_mappings()时批量插入是否更快?

时间:2016-04-27 00:47:57

标签: python postgresql sqlalchemy bulkinsert

我想要使用SQLAlchemy插入到PostgreSQL中的500K行。

对于速度,我使用session.bulk_insert_mappings()插入它们。

通常情况下,我会将插入分成较小的批次,以尽量减少session簿记。但是,bulk_insert_mappings()使用dicts并绕过了许多传统的会话簿记。

如果我将插入分解成更小的离散批次,比如每隔10K行插入一次,我是否仍然会看到提高速度?

如果是这样,我应该在每10K行之后关闭PG交易,还是一直打开它?

1 个答案:

答案 0 :(得分:4)

根据我的经验,如果您使用INSERT INTO tbl (column1, column2) VALUES (...), (...), ...;而不是bulk_insert_mappings使用executemany,则会看到实质性的改进。在这种情况下,您希望至少在语句级别对行进行批处理以获得健全性。

SQLAlchemy supports generating a multi-row VALUES clause for a single INSERT statement,所以你不必亲自制作声明。

批处理之间的提交可能不会对性能产生太大影响,但这样做的原因是不能长时间保持打开的事务,这可能会影响服务器上运行的其他事务。 / p>

您还可以尝试使用COPY将其加载到临时表中,然后INSERT从该表中加载。