flask_SQLAlchemy 出现了 Lost connection to MySQL server during query Mysql主机连接超时 错误。如何解决

使用python flask框架 flask_sqlalchemy 时出现了 Lost connection to MySQL server during query Mysql主机连接超时的问题

由于Mysql会定时处理长时间未连接使用的连接池 具体时长可通过 查看

show variables like '%timeout%'

 wait_timeout 为超时时长,这里的时间时 120秒

再超过120秒时会导致 Lost connection to MySQL server during query Mysql主机连接超时 错误

在通过网上翻阅具体解决方案发现答案有了滞后性,旧版本中可以通过配置

SQLALCHEMY_POOL_RECYCLE = 120   #多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时。

来进行自动回收连接的配置。

在查看源码后发现新版本已经移除了 SQLALCHEMY_POOL_RECYCLE 的配置项

采用

    SQLALCHEMY_ENGINE_OPTIONS = {
        "pool_recycle" : 120 #自动回收连接的秒数
    }

这种方式进行配置自动连接回收配置。

具体配置操作代码如下

main.py

    app = Flask(__name__)
    #引入数据库配置
    app.config.from_object(Config)
    #注册数据库
    init_db(app)

if __name__ == "__main__":
    app.run(debug=True,port=5000,host="0.0.0.0")

init_db.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


db = SQLAlchemy()

def init_db(app:Flask):
    db.init_app(app)

config.py

class Config:
    DEBUG = True
    HOST  = "127.0.0.1"
    PORT  = 5200

    #数据库配置
    MYSQL_USERNAME = "root"
    MYSQL_PASSWORD = ""
    MYSQL_HOST     = "127.0.0.1"
    MYSQL_PORT     = 3306
    MYSQL_DATABASE = ""

    #mysql 数据库的配置信息
    SQLALCHEMY_ECHO = True #如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。
    SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4"
    SQLALCHEMY_ENGINE_OPTIONS = {
        "pool_recycle" : 120 #自动回收连接的秒数
    }

 

热门相关:地球第一剑   重生当学神,又又又考第一了!   重生之至尊千金   法医娇宠,扑倒傲娇王爷   战神