作者NCUgamer (阿罗哈)
看板Python
标题[问题] Flask-SQLAlchemy无法中断connection问题
时间Thu Apr 23 21:28:06 2020
---------------
大概是这样
目前是使用flask实作网页登入系统
使用的套件有 flask-sqlalchemy连接DB用、flask_login管理登入用
系统实作上功能正常。
唯一的问题是。每进入一个页面都会检查是否处於登入状况。而这个登入状况会有一个
query的动作。 重点是每一次query都会让SQL的Connection数量增加而且不会关闭。
导致最後sql连线数量过多而暂时shutdown的问题出现。
code大概是这样
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required,
logout_user, current_user
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://xxxx@xxxx/user_table'
db = SQLAlchemy(app)
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id)) <---重点就是这行
每访问一个页面都要检查是否是登入状态才能检视。
这行就是检查是否登入时需要执行的code。
但是每次执行後会使db connection增加。而且不会close connection。
最後就会连线数量过多而导致MySQL shutdown...。
使用的Flask-SQLAlchemy版本是2.4.1
Stackoverflow上面也有人用一样差不多的写法遇到跟我一样的状况
https://bit.ly/3eKh5cP
最後也没有解决QQ
想请教各位该如何解决这个问题。 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.216.103 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1587648488.A.EFA.html
※ 编辑: NCUgamer (140.113.216.103 台湾), 04/23/2020 22:56:07
1F:→ MARGHT: 没有close db session? 04/23 22:59
我感觉也是
不过flask_alchemy document介绍query的方法就是这麽做。
query完也没有特别去关db session
2F:推 CMJ0121: 是无限制上升 还是你感觉有变多而已 04/23 23:40
无限制上升,我有去MySQL那边查 Thread(Connection数量)会一直增加
直到超过max_size
3F:→ CMJ0121: 我记得 flask_sqlalchemy 有帮你做 connection pool 04/23 23:41
4F:→ CMJ0121: 看 Github source code 他有注册 teardown_appcontext 04/24 00:15
5F:→ CMJ0121: 看起来是有做 self.session.remove() 04/24 00:15
正常的情况下应该会自己关闭。
原因不知道是不是我浏览一个页面会快速Query好几次,导致有些session没有关闭...。
但问题是就算Query好几次应该也不会创造一堆connection个别进行Query的动作
而是用同个connection进行好几次Query才对啊....。
目前确定是那行造成connection数量爆增,但是找不出原因QQ
※ 编辑: NCUgamer (140.113.216.103 台湾), 04/24/2020 03:13:13
6F:→ TakiDog: 我建议分开自己写 04/24 04:16
7F:推 handsomeLin: 先说板本,再来他没有关你就自己关试试看边 04/25 23:49