【发布时间】:2020-07-05 17:30:29
【问题描述】:
我正在尝试使用 pandas to_sql 将数据上传到 MS Azure Sql 数据库,这需要很长时间。我经常需要在睡觉前运行它并在早上醒来,它已经完成但花了几个小时,如果出现错误,我无法解决它。这是我的代码:
params = urllib.parse.quote_plus(
'Driver=%s;' % driver +
'Server=%s,1433;' % server +
'Database=%s;' % database +
'Uid=%s;' % username +
'Pwd={%s};' % password +
'Encrypt=yes;' +
'TrustServerCertificate=no;'
)
conn_str = 'mssql+pyodbc:///?odbc_connect=' + params
engine = create_engine(conn_str)
@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
if executemany:
cursor.fast_executemany = True
cursor.commit()
connection = engine.connect()
connection
然后我运行这个命令来获取 sql:
master_data.to_sql('table_name', engine, chunksize=500, if_exists='append', method='multi',index=False)
我玩过块大小,甜蜜点似乎是 100,考虑到我通常尝试一次上传 800,000-2,000,000 条记录,这还不够快。如果我将它增加到超过这个值,我会得到一个似乎只与块大小有关的错误。
OperationalError: (pyodbc.OperationalError) ('08S01', '[08S01] [Microsoft][ODBC Driver 17 for SQL Server]Communication link failure (0) (SQLExecDirectW)')
【问题讨论】:
标签: python pandas azure-sql-database pandas-to-sql