我当前正在尝试稍微调整一些脚本的性能,并且似乎瓶颈始终是使用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)
这导致以下(不幸的是非常不一致的)性能:
如果您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将无济于事,并可能导致错误
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。