我有一个Flask应用程序,它使用SQLAlchemy来访问PostgreSQL数据库。我在www.example.com文件中遵循此tutorial启动我的应用程序init.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(engine_options={"pool_pre_ping":True})
def create_app():
"""Construct the core application."""
app = Flask(__name__, instance_relative_config=False)
app.config.from_object('config.Config')
db.init_app(app)
with app.app_context():
from . import routes # Import routes
db.create_all() # Create sql tables for our data models
return app
我注意到db.create_all()调用在我的Postgres DB中创建了一些空闲事务。postgres查询
SELECT backend_start, query_start, state_change, wait_event_type, wait_event, state, query, backend_type
FROM pg_stat_activity
order by state_change desc;
给出4行空闲事务,查询字段等于ROLLBACK(图像连接)
如果我注解db.create_all()命令,则没有空闲事务。有人能解释这种交易的原因以及如何避免它们。
1条答案
按热度按时间0aydgbwb1#
SQLAlchemy引擎通常会生成一个连接池。引擎将为每个新问题创建连接,最多可达池中的最大连接数。例如,如果连接池的大小为5,则前五个查询将创建一个新的连接池,但随后这些连接将被重用于未来的查询。
您可以通过Flask-SQLAlchemy中的
SQL_ENGINE_OPTIONS
对象控制连接池的大小,具体选项继承自SQLAlchemy中的连接选项