我正在使用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)
现在,据我所知,通过使用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)
我尝试使用db.session.close()
,但是没有出现此错误,而是没有正确提交我的数据库更新。我做错了什么?处理请求后,是否需要手动关闭与数据库的连接?
答案 0 :(得分:2)
我找到了解决方案。问题是我有很多进程“处于空闲状态”,因为在使用Fold:1
[0 1 3 4 5 6 7 9]
[0 1 2 3 4 5 8 9]
[2 8]
[6 7]
Fold:2
[0 1 2 3 5 6 7 8]
[0 2 3 4 6 7 8 9]
[4 9]
[1 5]
Fold:3
[0 2 3 4 5 7 8 9]
[0 1 3 5 6 7 8 9]
[1 6]
[2 4]
Fold:4
[0 1 2 4 5 6 8 9]
[1 2 4 5 6 7 8 9]
[3 7]
[0 3]
Fold:5
[1 2 3 4 6 7 8 9]
[0 1 2 3 4 5 6 7]
[0 5]
[8 9]
db.session.commit()
要对此进行调查,我直接使用以下命令查询了(开发中的)PostgreSQL数据库:
Query.first()
答案 1 :(得分:0)
每次与数据库进行查询会话时,只需断开连接即可。
products = db.session.query(Product).limit(20).all()
db.session.remove()