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

Jef*_*man 4 python postgresql bulkinsert sqlalchemy

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

为了速度,我使用session.bulk_insert_mappings().

通常,我会将插入内容分成较小的批次以最大程度地减少session簿记。但是,bulk_insert_mappings()使用dicts并绕过了许多传统的会话簿记。

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

如果是这样,我应该在每 10K 行之后关闭 PG 事务,还是一直保持打开状态?

uni*_*rio 7

根据我的经验,如果您使用INSERT INTO tbl (column1, column2) VALUES (...), (...), ...;bulk_insert_mappings使用executemany. 在这种情况下,您将希望至少在语句级别对行进行批处理以确保完整性。

SQLAlchemy支持VALUES为单个INSERT语句生成多行子句,因此您不必手工制作语句。

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

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