【问题标题】:pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")
【发布时间】:2020-07-19 07:26:43
【问题描述】:

如果遇到任何错误,我的问题是关于重新连接到 MySQL 服务器。

我正在连接到 Flask 中的 MySQL 服务器:

connection = pymysql.connect(host='host',
                             user='user',
                             connect_timeout= 31536000,
                             password='passwd',
                             db='db_name',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

对于使用游标的查询也是如此: Flask 路由代码:

@app.route("/chart", methods=['GET', 'POST'])
def chart():
    try:
        with connection.cursor() as cursor:
        #line chart open tickets
        query = "select createdDate,rootCause,requestId from db_name;"
        df = pd.read_sql(query, connection)
        print(df)

    except pymysql.MySQLError as e:
        print(e)

当我收到错误时,我想重新连接到数据库:

pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")

请帮我找到这个错误的解决方案。

遇到任何错误时如何重新连接到数据库。

提前致谢!

【问题讨论】:

    标签: python-3.x flask mysql-python pymysql


    【解决方案1】:

    看起来您一直在使用单个连接。尝试每次创建一个新连接,并在运行所需的查询后关闭它。 通过这个可以避免这个问题。

    【讨论】:

      【解决方案2】:

      在调用create_engine() 时设置pool_pre_ping=True 似乎对我有很大帮助。

      例子:

      engine = create_engine(db_connection, pool_pre_ping=True)
      

      来自SQLAlchemy docspool_pre_ping

      “如果 True 将启用连接池“pre-ping”功能,该功能会在每次结帐时测试连接的活跃度。”

      【讨论】:

        猜你喜欢
        • 2013-12-16
        • 2011-12-11
        • 2011-02-04
        • 2012-12-19
        • 2012-10-30
        • 2019-10-13
        • 2015-12-02
        • 2017-12-21
        • 2015-10-20
        相关资源
        最近更新 更多