如何处理Loss连接错误和BaseSSHTunnelForwarderError:无法建立到SSH网关的会话

时间:2017-09-11 06:45:31

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

这是我在下面显示的代码,用于连接数据库并获取一些表。我已经使用了一段时间没有问题,但最近我继续运行了几次这两个错误。我认为它与数据库有关。 基本上发生的事情是,我可以连接到数据库,检索我的表,但由于我的数据非常庞大,我在for循环中进行,我在给定范围内循环日期并获取数据。例如,我从20160401开始逐个计算,直到20170331(约365个循环)。 但是,在我运行20个循环后,我得到了这个错误s

  

OperationError“查询期间与MySQL服务器的连接丢失(%s)”%   (E,))

有时这下面的

  

BaseSSHTunnelForwarderError:无法与SSH建立会话   网关

我想解决这个错误但是如果不可能我想等几秒钟然后自动重新连接到数据库然后执行相同的查询。任何帮助解决这个问题都将受到高度赞赏。

import pymysql

from sshtunnel import SSHTunnelForwarder   
with SSHTunnelForwarder(
        (ssh_host, ssh_port),
        ssh_username=ssh_user,
        ssh_pkey=mypkey,
        remote_bind_address=(sql_ip, sql_port)) as tunnel:
        conn = pymysql.connect(host='127.0.0.1', 
                user=sql_username,
                passwd=sql_password, 
                port=tunnel.local_bind_port,
                db=db,charset='ujis')
        data = pd.read_sql_query(query_2, conn,)

这是我到目前为止所尝试的但是它无法正常工作

while True:
        try:
            with SSHTunnelForwarder(
                    (ssh_host, ssh_port),
                    ssh_username=ssh_user,
                    ssh_pkey=mypkey,
                    remote_bind_address=(sql_ip, sql_port)) as tunnel:
                conn = pymysql.connect(host='127.0.0.1',
                                       user=sql_username,
                                       passwd=sql_password,
                                       port=tunnel.local_bind_port,
                                       db=db, charset='ujis')
                data = pd.read_sql_query(query, conn)
            break
        except pymysql.err.OperationalError as e:
            conn.ping(reconnect=True)

0 个答案:

没有答案