Kon*_*rad 6 python sqlalchemy flask flask-sqlalchemy
我正在使用 Flask 和 Flask-SQLAlchemy 运行一个应用程序。
from config import FlaskDatabaseConfig
from flask import Flask
from flask import request
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
application = Flask(__name__)
application.config.from_object(FlaskDatabaseConfig())
db = SQLAlchemy(application)
@application.route("/queue/request", methods=["POST"])
def handle_queued_request():
stuff()
return ""
def stuff():
# Includes database queries and updates and a call to db.session.commit()
# db.session.begin() and db.session.close() are not called
pass
if __name__ == "__main__":
application.run(debug=False, port=5001)
Run Code Online (Sandbox Code Playgroud)
现在,根据我的理解,通过使用 Flask-SQLAlchemy,我不需要自己管理会话。那么,如果我依次运行多个请求到我的端点,为什么会出现以下错误?
sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r)
Run Code Online (Sandbox Code Playgroud)
我试过使用,db.session.close()
但是,我的数据库更新没有正确提交,而不是这个错误。我做错了什么?处理完请求后是否需要手动关闭与数据库的连接?
我已经找到了解决方案。问题是我有很多进程“在事务中处于空闲状态”,因为我db.session.commit()
在使用某些数据库 SELECT 语句后没有调用Query.first()
为了对此进行调查,我直接使用以下命令查询了我的(开发)PostgreSQL 数据库:
SELECT * FROM pg_stat_activity
Run Code Online (Sandbox Code Playgroud)