开发者社区> 问答> 正文

熊猫to_sql参数和性能

我当前正在尝试稍微调整一些脚本的性能,并且似乎瓶颈始终是使用pandas to_sql函数实际插入数据库(= MSSQL)的瓶颈。

其中一个因素是mssql的参数限制2100。

我建立与sqlalchemy的连接(具有mssql + pyodbc风味):

engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params, fast_executemany=True)

插入时,我使用了块大小(所以我保持在参数限制和method =“ multi”以下):

dataframe_audit.to_sql(name="Audit", con=connection, if_exists='append', method="multi",
                               chunksize=50, index=False)

我不确定确切要怎么看:

不一致似乎源于DB Server本身 更大的块大小似乎并不能转化为更好的性能(反之亦然!?) 也许我应该从pyodbc切换到turbodbc(根据一些帖子,它会产生更好的性能) 有什么想法可以为我的DataFrame带来更好的插入性能吗?

展开
收起
祖安文状元 2020-01-05 14:01:07 552 0
1 条回答
写回答
取消 提交回答
  • 如果您fast_executemany=True在SQLAlchemy create_engine调用中将pyodbc与ODBC驱动程序17一起使用的是最新版本,则应在调用中使用method=None(默认值)to_sql。这样,pyodbc可以使用ODBC参数数组,并在该设置下提供最佳性能。您将不会达到2100个参数的SQL Server存储过程限制(除非您的DataFrame有〜2100列)。您将面临的唯一限制是,如果您的Python进程没有足够的内存来构建整个参数数组,然后再将其发送到SQL Server。

    仅当使用不支持参数数组的ODBC驱动程序(例如FreeTDS ODBC)时,该method='multi'选项to_sql才适用于pyodbc。在这种情况下fast_executemany=True将无济于事,并可能导致错误。

    2020-01-05 14:01:13
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PolarDB NL2SQL: 帮助您写出准确、优化的SQL 立即下载
Blink SQL关键技术及实现原理 立即下载
MaxCompute SQL计算成本调优以及优化方法 立即下载