簡體   English   中英

使用 SQLAlchemy 將 Pandas 數據幀導出到 MySQL 時出現操作錯誤 2055

[英]Operational error 2055 while exporting pandas dataframe to MySQL using SQLAlchemy

我第一次使用SQLAlchemy將大約 600 萬條記錄導出到 MySQL。 以下是我收到的錯誤:

OperationalError: (mysql.connector.errors.OperationalError) 2055: Lost connection to MySQL server at '127.0.0.1:3306', system error: 10053 An established connection was aborted by the software in your host machine

代碼:

import pandas as pd
import sqlalchemy

df=pd.read_excel(r"C:\Users\mazin\1-601.xlsx")

database_username = 'root'
database_password = 'aUtO1115'
database_ip       = '127.0.0.1'
database_name     = 'patenting in psis'
database_connection = sqlalchemy.create_engine('mysql+mysqlconnector://{0}:{1}@{2}/{3}'.
                                               format(database_username, database_password, 
                                                      database_ip, database_name), pool_recycle=1, pool_timeout=30).connect()

df.to_sql(con=database_connection, name='sample', if_exists='replace')
database_connection.close()

注意:如果我導出大約 100 條記錄,我不會收到錯誤消息。 參考類似帖子后,我添加了pool_recyclepool_timeout參數,但錯誤仍然存​​在。

問題是您試圖將 600 萬行作為一個塊導入。 這需要時間。 使用您當前的配置, pool_recycle設置為 1 秒,這意味着連接將在 1 秒后關閉,這肯定沒有足夠的時間插入 6 個銑削行。 我的建議是:

database_connection = sqlalchemy.create_engine(
    'mysql+mysqlconnector://{0}:{1}@{2}/{3}'.format(
        database_username, 
        database_password,
        database_ip, database_name
    ), pool_recycle=3600, pool_size=5).connect()
df.to_sql(
    con=database_connection, 
    name='sample', 
    if_exists='replace',
    chunksize=1000
)

這將設置 5 個連接池,回收時間為 1 小時。 第二行將一次插入 1000(而不是一次插入所有行)。 您可以嘗試使用值來實現最佳性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM