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

标签 python postgresql sqlalchemy bulkinsert

我有 50 万行要使用 SQLAlchemy 插入到 PostgreSQL 中。

为了提高速度,我使用 session.bulk_insert_mappings() 插入它们。

通常,我会将插入分成更小的批处理以最小化session 簿记。但是,bulk_insert_mappings() 使用 dicts 并绕过了很多传统的 session 簿记。

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

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

最佳答案

根据我的经验,如果使用 INSERT INTO tbl (column1, column2) VALUES (...), (...), ...; 作为与使用 executemanybulk_insert_mappings 相反。在这种情况下,您将希望至少在语句级别对行进行批处理以保持理智。

SQLAlchemy supports generating a multi-row VALUES clause for a single INSERT statement ,因此您不必手工制作声明。

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

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

关于python - 使用 SQLAlchemy bulk_insert_mappings() 时批处理我的插入是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36878346/

相关文章:

Spring 应用程序不在 Postgres 数据库上创建表

postgresql - getsockopt : connection timed out

python - SQLalchemy 中不同表的关系

python - 将一个类映射到 SQLAlchemy 中的多个表

python - keras LSTM 模型上的 GridSearchCV 训练为 "killed",没有明确的原因

python - 哪个是更好的做法 - 全局导入或本地导入

sql - 用于 Postgresql 的 Teradata 'like any'

python - SQLAlchemy , 属性错误 : 'tuple' object has no attribute 'foreign_keys'

python - 使用 yocto 为 Raspberry pi 3 构建图像时出现解析错误

python - 当将 numpy 数组输入 OpenCv 时,OpenCv 会引发错误