我有 50 万行要使用 SQLAlchemy 插入到 PostgreSQL 中。
为了提高速度,我使用 session.bulk_insert_mappings()
插入它们。
通常,我会将插入分成更小的批处理以最小化session
簿记。但是,bulk_insert_mappings()
使用 dicts
并绕过了很多传统的 session 簿记。
如果我将插入分成更小的离散批处理,比如每 10K 行插入一次,我是否仍会看到速度提升?
如果是这样,我应该在每 10K 行后关闭 PG 事务,还是让它一直打开?
最佳答案
根据我的经验,如果使用 INSERT INTO tbl (column1, column2) VALUES (...), (...), ...;
作为与使用 executemany
的 bulk_insert_mappings
相反。在这种情况下,您将希望至少在语句级别对行进行批处理以保持理智。
SQLAlchemy supports generating a multi-row VALUES
clause for a single INSERT
statement ,因此您不必手工制作声明。
在批处理之间提交可能不会对性能产生太大影响,但这样做的原因是不要将打开的事务保留太长时间,这可能会影响服务器上运行的其他事务。
您还可以尝试使用 COPY
将其加载到临时表中,然后从该表中INSERT
ing。
关于python - 使用 SQLAlchemy bulk_insert_mappings() 时批处理我的插入是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36878346/