我正在为Flask使用PostgreSQL和Flas-SQLAlchemy
扩展名。
#app.py
app = Flask(__name__)
app.config['SQLALCHEMY_POOL_SIZE'] = 20
db = SQLAlchemy(app)
#views.py
user = User(***)
db.session.add(user)
db.session.commit()
请注意,我没有按文档建议关闭连接:
您必须提交会话,但您不必在请求结束时将其删除,Flask-SQLAlchemy会为您执行此操作。
但是,当我运行以下PostgreSQL查询时,我可以看到一些IDLE
连接:
SELECT * FROM pg_stat_activity;
这是否意味着Flask-SQLAlchemy没有关闭连接?我很担心,因为最近我遇到了remaining connection slots are reserved for non-replication superuser connections
错误。
答案 0 :(得分:4)
SQLAlchemy设置一个连接池,由于性能原因,它们将保持打开状态。 PostgreSQL有一个max_connections
配置选项。如果超过该值,则需要降低池数或提高最大连接数。鉴于默认最大值为100,并且您已将池设置为20,更可能的是有其他应用程序与同一数据库打开连接。 max_connections
是一个全局设置,因此它必须考虑连接到数据库服务器的所有应用程序。