use*_*200 6 python sql import performance pandas
我有一个1,000,000x 50Pandas DataFrame,我目前正在使用以下方法写入SQL表:
df.to_sql('my_table', con, index=False)
这需要非常长的时间.我已经看到了关于如何在线加速这个过程的各种解释,但它们似乎都不适用于MSSQL.
如果我尝试以下方法:
使用SQLAlchemy批量插入Pandas DataFrame
然后我收到一个no attribute copy_from错误.
如果我尝试多线程方法:
http://techyoubaji.blogspot.com/2015/10/speed-up-pandas-tosql-with.html
然后我收到一个QueuePool limit of size 5 overflow 10 reach, connection timed out错误.
有没有简单的方法来加速to_sql()到MSSQL表?要么是通过BULK COPY还是其他一些方法,而是完全来自Python代码?
小智 8
在 pandas 0.24 中,您可以使用 method ='multi' ,块大小为 1000,这是 sql server 的限制
块大小=1000,方法='多'
https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#io-sql-method
0.24.0 版本中的新增内容。
参数方法控制所使用的 SQL 插入子句。可能的值为:
无:使用标准 SQL INSERT 子句(每行一个)。'multi':在单个 INSERT 子句中传递多个值。它使用并非所有后端都支持的特殊 SQL 语法。这通常为 Presto 和 Redshift 等分析数据库提供更好的性能,但如果表包含许多列,则传统 SQL 后端的性能会较差。有关更多信息,请查看 SQLAlchemy 文档。
我已经使用 ctds 进行批量插入,这在 SQL 服务器上要快得多。在下面的示例中, df 是 Pandas DataFrame。DataFrame 中的列序列与 mydb 的架构相同。
import ctds
conn = ctds.connect('server', user='user', password='password', database='mydb')
conn.bulk_insert('table', (df.to_records(index=False).tolist()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4395 次 |
| 最近记录: |