Flask-SQLAlchemy 关闭连接
Flask-SQLAlchemy close connection
我正在使用 PostgreSQL 和 Flas-SQLAlchemy
Flask 扩展。
#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()
请注意,我没有按照文档的建议关闭连接:
You have to commit the session, but you don’t have to remove it at the end of the request, Flask-SQLAlchemy does that for you.
但是,当我 运行 以下 PostgreSQL 查询时,我可以看到一些 IDLE
连接:
SELECT * FROM pg_stat_activity;
这是否意味着我的 Flask-SQLAlchemy 没有关闭连接有问题?我很担心,因为最近我收到 remaining connection slots are reserved for non-replication superuser connections
错误。
SQLAlchemy 设置了一个连接池,出于性能原因,该连接池将保持打开状态。 PostgreSQL 有一个 max_connections
配置选项。如果超过该值,则需要降低池数或增加最大连接数。假定默认最大值为 100,并且您已将池设置为 20,则更有可能是其他应用程序打开了与同一数据库的连接。 max_connections
是全局设置,因此它必须考虑到连接到数据库服务器的所有应用程序。
我正在使用 PostgreSQL 和 Flas-SQLAlchemy
Flask 扩展。
#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()
请注意,我没有按照文档的建议关闭连接:
You have to commit the session, but you don’t have to remove it at the end of the request, Flask-SQLAlchemy does that for you.
但是,当我 运行 以下 PostgreSQL 查询时,我可以看到一些 IDLE
连接:
SELECT * FROM pg_stat_activity;
这是否意味着我的 Flask-SQLAlchemy 没有关闭连接有问题?我很担心,因为最近我收到 remaining connection slots are reserved for non-replication superuser connections
错误。
SQLAlchemy 设置了一个连接池,出于性能原因,该连接池将保持打开状态。 PostgreSQL 有一个 max_connections
配置选项。如果超过该值,则需要降低池数或增加最大连接数。假定默认最大值为 100,并且您已将池设置为 20,则更有可能是其他应用程序打开了与同一数据库的连接。 max_connections
是全局设置,因此它必须考虑到连接到数据库服务器的所有应用程序。