翼度科技»论坛 编程开发 python 查看内容

flask_SQLAlchemy 出现了 Lost connection to MySQL server during query M

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
使用python flask框架 flask_sqlalchemy 时出现了 Lost connection to MySQL server during query Mysql主机连接超时的问题
由于Mysql会定时处理长时间未连接使用的连接池 具体时长可通过 查看
  1. show variables like '%timeout%'
复制代码

 wait_timeout 为超时时长,这里的时间时 120秒
再超过120秒时会导致 Lost connection to MySQL server during query Mysql主机连接超时 错误
在通过网上翻阅具体解决方案发现答案有了滞后性,旧版本中可以通过配置
  1. SQLALCHEMY_POOL_RECYCLE = 120   #多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时。
复制代码
来进行自动回收连接的配置。
在查看源码后发现新版本已经移除了 SQLALCHEMY_POOL_RECYCLE 的配置项
采用
  1.     SQLALCHEMY_ENGINE_OPTIONS = {
  2.         "pool_recycle" : 120 #自动回收连接的秒数
  3.     }
复制代码
这种方式进行配置自动连接回收配置。
具体配置操作代码如下
main.py
  1.     app = Flask(__name__)
  2.     #引入数据库配置
  3.     app.config.from_object(Config)
  4.     #注册数据库
  5.     init_db(app)
  6. if __name__ == "__main__":
  7.     app.run(debug=True,port=5000,host="0.0.0.0")
复制代码
init_db.py
  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. db = SQLAlchemy()
  4. def init_db(app:Flask):
  5.     db.init_app(app)
复制代码
config.py
  1. 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 = {
  2.         "pool_recycle" : 120 #自动回收连接的秒数
  3.     }
复制代码
 

来源:https://www.cnblogs.com/zheng01/p/17426084.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具