Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pymysql.err.OperationalError:2013,使用pymysql和SQLAlchemy_Python_Mysql_Sqlalchemy_Pymysql - Fatal编程技术网

Python pymysql.err.OperationalError:2013,使用pymysql和SQLAlchemy

Python pymysql.err.OperationalError:2013,使用pymysql和SQLAlchemy,python,mysql,sqlalchemy,pymysql,Python,Mysql,Sqlalchemy,Pymysql,伙计们!希望有人能帮我解决这个问题 我通过SQLAlchemy执行一个查询,返回需要在python脚本上处理的~6kk行(它是历史数据)。我有一些函数可以使用pandas dataframe读取和处理数据。以下是函数: def consulta_db_cancelamentos(db_con, query): engine = create_engine(db_con, pool_recycle=3600) con = engine.connect() query_res

伙计们!希望有人能帮我解决这个问题

我通过SQLAlchemy执行一个查询,返回需要在python脚本上处理的~6kk行(它是历史数据)。我有一些函数可以使用pandas dataframe读取和处理数据。以下是函数:

def consulta_db_cancelamentos(db_con, query):
    engine = create_engine(db_con, pool_recycle=3600)
    con = engine.connect()
    query_result = con.execution_options(stream_results=True).execute(query)
    query_result_list = []
    while True:
        rows = query_result.fetchmany(10000)
        if not rows:
            break
        for row in rows:
            data = row['data'],\
                row['plano'],\
                row['usuario_id'],\
                row['timestamp_cancelamentos'],\
                row['timestamp'],\
                row['status']

            query_result_list.append(data)

        df = pd.DataFrame()
        if df.empty:
            df = pd.DataFrame(query_result_list)
        else:
            df.append(pd.DataFrame(query_result_list))
        df_cor = corrige_cancelamentos_df(df, '2017-01-01', '2017-12-15')

    con.close()

    return df_cor
如您所见,我已经在尝试读取数据并将其处理/存储在10k行中。当我尝试执行整个脚本时,我在函数中遇到了这个错误(我还包括在
main()
上引发的错误):

回溯(最近一次呼叫最后一次):
fetchmany中的文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1159行
l=self.process\u行(self.\u fetchmany\u impl(size))
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1318行,在
行=self.\u fetchone\u impl()
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1308行,在
self.\u缓冲区\u行()
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1295行,在缓冲区中
self.\uuu rowbuffer=collections.deque(self.cursor.fetchmany(size))
文件“/usr/local/lib/python3.5/dist-packages/pymysql/cursors.py”,第485行,在fetchmany中
row=self.read\u next()
文件“/usr/local/lib/python3.5/dist-packages/pymysql/cursors.py”,第446行,下一页
返回self.\u conv.\u行(self.\u result.\u read.\u rowdata.\u packet.\u unbuffered())
文件“/usr/local/lib/python3.5/dist packages/pymysql/connections.py”,第1430行,在未缓冲的数据包中
数据包=自连接。\u读取\u数据包()
文件“/usr/local/lib/python3.5/dist-packages/pymysql/connections.py”,第1008行,在读取数据包中
recv_data=self.\u读取字节(字节到读取字节)
文件“/usr/local/lib/python3.5/dist packages/pymysql/connections.py”,第1037行,以字节为单位
CR.CR\u服务器\u丢失,“查询期间与MySQL服务器的连接丢失”)
pymysql.err.OperationalError:(2013,“查询期间与MySQL服务器的连接丢失”)
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“/home/aiquis/EI/cancelamentos_testes5.py”,第180行,in
main()
文件“/home/aiquis/EI/cancelamentos_testes5.py”,第164行,主文件
cancelamentos_df_corrigido=咨询数据库取消(数据库参数,查询取消)
文件“/home/aiquis/EI/cancelamentos_testes5.py”,第14行,在consulta_db_cancelamentos中
rows=查询结果。fetchmany(1000)
fetchmany中的文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1166行
self.cursor、self.context)
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/base.py”,第1413行,在_handle_dbapi_exception中
exc_信息
文件“/home/aiquis/.local/lib/python3.5/site-packages/sqlalchemy/util/compat.py”,第203行,从源代码开始
重新释放(类型(异常),异常,tb=exc\U tb,原因=原因)
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/util/compat.py”,第186行,在reraise中
通过_回溯(tb)提升值
fetchmany中的文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1159行
l=self.process\u行(self.\u fetchmany\u impl(size))
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1318行,在
行=self.\u fetchone\u impl()
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1308行,在
self.\u缓冲区\u行()
文件“/home/aiquis/.local/lib/python3.5/site packages/sqlalchemy/engine/result.py”,第1295行,在缓冲区中
self.\uuu rowbuffer=collections.deque(self.cursor.fetchmany(size))
文件“/usr/local/lib/python3.5/dist-packages/pymysql/cursors.py”,第485行,在fetchmany中
row=self.read\u next()
文件“/usr/local/lib/python3.5/dist-packages/pymysql/cursors.py”,第446行,下一页
返回self.\u conv.\u行(self.\u result.\u read.\u rowdata.\u packet.\u unbuffered())
文件“/usr/local/lib/python3.5/dist packages/pymysql/connections.py”,第1430行,在未缓冲的数据包中
数据包=自连接。\u读取\u数据包()
文件“/usr/local/lib/python3.5/dist-packages/pymysql/connections.py”,第1008行,在读取数据包中
recv_data=self.\u读取字节(字节到读取字节)
文件“/usr/local/lib/python3.5/dist packages/pymysql/connections.py”,第1037行,以字节为单位
CR.CR\u服务器\u丢失,“查询期间与MySQL服务器的连接丢失”)
sqlalchemy.exc.OperationalError:(pymysql.err.OperationalError)(2013,“查询期间与MySQL服务器的连接丢失”)(此错误的背景信息位于:http://sqlalche.me/e/e3q8)
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.5/dist-packages/pymysql/connections.py”,第1345行,在__
文件“/usr/local/lib/python3.5/dist packages/pymysql/connections.py”,第1447行,在“完成”无缓冲查询中
文件“/usr/local/lib/python3.5/dist-packages/pymysql/connections.py”,第991行,在读取数据包中
文件“/usr/local/lib/python3.5/dist packages/pymysql/connections.py”,第1022行,以字节为单位
AttributeError:“非类型”对象没有属性“settimeout”
[以602.4s完成]
我写的
consulta_db_cancelamentos
已经是对SO和SQLAlchemy文档进行搜索的结果。假设我无法访问MySQL服务器管理


例如,当我将查询限制为只为一个
usuario\u id
带来结果时(大约50行),它就可以正常工作。我在MySQL工作台上执行了相同的查询,持续时间/获取时间为251.998秒/357.541秒

set global max_allowed_packet = 67108864;

这个解决方案是在这里提出的

我遇到了这样一个问题。在将
stream\u results=True
放入查询后,我遇到了这个问题

对我来说,参数
net\u write\u timeoutset global max_allowed_packet = 67108864;