【发布时间】:2018-07-20 13:14:31
【问题描述】:
我第一次使用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_recycle和pool_timeout参数,但错误仍然存在。
【问题讨论】:
-
如果你要插入 600 万行,你肯定会超过 30 秒的超时时间。您是否尝试过一次全部输入块。
to_sql有可选参数chunksize可以使用。 -
@PerunSS - 当我使用 57600 秒的超时时,我得到了同样的错误。另外,当我使用 chunksize 参数时,它给了我 Programming Error 1064: You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%(Maintenance Status (US))s, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Ma' 附近使用正确的语法
-
@PerunSS - 使用 chunksize 参数并为 pool_recycle 和 pool_timeout 设置适当的值使代码工作。您想将其发布为答案吗?
标签: python mysql python-3.x sqlalchemy mysql-python