开发者社区> 问答> 正文

熊猫to_sql参数和性能

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

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

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

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

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

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

这导致以下(不幸的是非常不一致的)性能:

展开
收起
祖安文状元 2020-01-05 14:24:51 730 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:24:58
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载