首页 > 解决方案 > mysql 服务器在使用 pd.read_sql() 获取大量数据集时失去连接

问题描述

pd.read_sql() 在查询形成之前,使用连接(由 SQLAlchemy 引擎创建)从 MySQL 数据库中获取大约 890 000 行,每行有 60-65 列。有没有其他方法可以优化获取这么多的数据,因为我确实需要所有的行和列,并且我想摆脱异常。

这是一个代码片段:

import pandas as pd

def read_outputs(engine):
   data = dict()

   with engine.connect() as conn: 
       data['tbl_1']= pd.read_sql('tbl_1',con=conn).to_json()
       data['tbl_2']= pd.read_sql('tbl_2',con=conn).to_json()
       data['tbl_3']= pd.read_sql('tbl_3',con=conn).to_json()
       engine.dispose()
   
   return {'data':data}

标签: pythonmysqlpandassqlalchemy

解决方案


使用“SET GLOBAL connect_timeout”属性增加默认超时

conn.query('SET GLOBAL connect_timeout="<desired time>")

您还可以在创建引擎时将超时设置为:

create_engine(db_url, connect_args={'connect_timeout': <desired time>})

推荐阅读