使用SQLAlchemy将pandas数据框导出到MySQL时出现操作错误2055

时间:2018-02-09 17:43:52

标签: python mysql python-3.x sqlalchemy mysql-python

我第一次使用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 将大约600万条记录导出到MySQL。以下是我收到的错误:

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()

代码:

pool_recycle

注意:如果我导出大约100条记录,我不会收到错误。在引用类似帖子后,我添加了pool_timeoutslider.minProperty().bind(scrollPane.vminProperty()); slider.maxProperty().bind(scrollPane.vmaxProperty()); 参数,但错误仍然存​​在。

1 个答案:

答案 0 :(得分:1)

问题是你试图导入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(而不是一次插入所有行)。您可以尝试使用值来获得最佳性能。