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'))")

我的问题是如果遇到任何错误,请重新连接到 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'))")

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

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

提前致谢!

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

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

示例:

engine = create_engine(db_connection, pool_pre_ping=True)

来自 pool_pre_ping 上的 SQLAlchemy docs

“如果为 True,将启用连接池“预 ping”功能,该功能会在每次结帐时测试连接的活动性。”