python - Pandas 到 Sql Server 的速度 - python 批量插入?

标签 python sql-server pandas azure sqlalchemy

这可能是一个广泛讨论的话题,但我还没有找到“答案”。我每月都会将大表插入 Azure SQL Server。我用 python 和 Pandas 处理内存中的原始数据。我真的很喜欢 Pandas 的速度和多功能性。

示例 DataFrame 大小 = 520 万行、50 列、分配的 250 MB 内存

将处理后的 Pandas DataFrame 传输到 Azure SQL Server 始终是瓶颈。对于数据传输,我使用了to_sql(与sqlalchemy)。我尝试了 fast_executemany、各种 block 大小等参数。

到目前为止,我发现的最快方法是将 DataFrame 导出到 csv 文件,然后使用 SSMS、bcp、Azure Blob 等将其批量插入到 SQL Server 中。

但是,我正在考虑绕过 csv 文件创建来执行此操作,因为我的 df 已设置所有 dtypes,并且已加载到内存中。

仅使用 python/Pandas 将此 df 传输到 SQL Server 的最快方法是什么?我也对使用二进制文件传输等解决方案感兴趣 - 只要我消除平面文件导出/导入。

谢谢

最佳答案

我遇到了类似的问题,我使用 BCP 实用程序解决了它。瓶颈问题的基本描述是它似乎使用 RBAR 数据输入,如 Row-By-Agonizing-Row 插入,即一个插入语句/记录。采用批量插入路线节省了我很多时间。当我跨过 100 万条以上记录的阈值时,真正的好处似乎就来了,而您似乎已经远远领先了。

Link to utility:https://github.com/yehoshuadimarsky/bcpandas

关于python - Pandas 到 Sql Server 的速度 - python 批量插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68654842/

相关文章:

c# - 为什么当相同的硬编码 SQL 立即执行时,这个参数化 SQL 却要花很长时间

sql - 使用表名删除超过 12 个月的表

python - 如何确定 N 个 bool Pandas 列的逻辑真值?

python - 查找并删除具有由第三个唯一特征标识的两个相同特征的重复数据条目

python-2.7 - pandas数据帧中大字符串列的高效存储

python - Django/Django Rest Framework - 禁用 CSRF

Python,正则表达式 : Is it possible to have 2 ending anchors?

python - 将文件添加到 tar 存档而不先保存

Python - 检查一个列表是否是另一个列表的子集,如果不是,我如何拆分它?

SQL Server : identify first row value appears in column and insert into table