ermutuxia

2021-01-23   阅读量: 51

Python Mysql

用python库将一亿条数据从数据框导入到mysql中出现错误提示

错误提示如下:

File "D:\ProgramData\Anaconda3\lib\site-packages\pymysql\connections.py", line 738, in _read_bytes

raise err.OperationalError(


OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10053] 您的主机中的软件中止了一个已建立的连接。)')


代码如下:

import pandas as pd


import numpy as np


#准备数据框


data1=pd.DataFrame({"x":list(range(100000000))})



data0=pd.DataFrame({"x":list(range(10))})



from sqlalchemy import create_engine


connection1=create_engine("mysql+pymysql://root:12345@localhost:3306/test1?charset=utf8")


import sqlalchemy


#create_engine的用法可以用help(sqlalchemy.engine)看下。


pd.io.sql.to_sql(data1,"biao3",connection1,schema="test1",if_exists="replace")


pd.io.sql.to_sql(data0,"biao0",connection1,schema="test1",if_exists="replace")

原因:这是因为我们导入的数据量太大导致的

即使是mysql自己往自己的库里面插数据,一次性插入太多数据也会出现这个问题。

因此这个问题应该算是Mysql自己的一个问题。


这里借用一下我搜索到的别人反馈的信息:

在执行脚本插入操作的时候, 报了一个 mysql 连接断开的错误, 报错信息为 pymysql.err.OperationalError: (2013, ‘Lost connection to MySQL server during query’), 原因是同时操作了太大的数据, 比如我就用 cursor.execute(sql) 执行了上千条插入语句, 然后再commit 一次, 这样同时数据量过大, 就会造成mysql连接断开, 但是数据还是会插进入, 不过有可能会丢数据;

解决方案:

加一个全局变量计数器, 然后在执行语句达到一定数量后再commint 一次, 这个数据可以根据mysql的性能来设置, 我这边设置成100之后就没问题了 (别忘了commit之后把计数器变量清零)】


我们的这个问题这里,也可以参考这种解决方案,具体来说就分批导入。一部分一部分的导入。

试了下1000万 1千万是可以的。

再试下两千万

image.png

2000 0000很长时间都没跑完

0.0000 0 0 关注作者 收藏

评论(0)


暂无数据

推荐课程