Flask-sqlalchemy:何时关闭会话?

Max*_*oer 2 python flask flask-sqlalchemy

我用 Flask 创建了一个 python web 应用程序,似乎我遇到了与数据库的连接问题。我认为这是因为我没有在代码中的某个地方关闭会话。

我有

db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)

用于数据库和使用

@views.route('/test/', methods=['GET', 'POST'])
def test():
    db.session.add(something)
    db.session.commit()

@views.route('/another_page/', methods=['GET', 'POST'])
def page():
    some_records = User.query.get(some_ids)
Run Code Online (Sandbox Code Playgroud)

用于将记录添加到数据库中。

在这种情况下,我什么时候必须关闭会话?有没有办法在用户离开后关闭连接?每次数据库完成一个页面时我都应该关闭吗?查询后是否需要关闭连接?

rus*_*ein 5

文档接下来说:

与声明式方法一样,您需要在每次请求或应用程序上下文关闭后关闭会话。将其放入您的应用程序模块中:

from yourapplication.database import db_session

@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()
Run Code Online (Sandbox Code Playgroud)

UPD:对于 Flask-SQLAlchemy,该人员是硬编码的,因此您在开发时不需要关心它。

  • 请注意,[db.init_app()](https://github.com/pallets-eco/flask-sqlalchemy/blob/e5bf821072de0d55ff92891432004322864a7265/src/flask_sqlalchemy/__init__.py#L873)应该自动配置它。 (2认同)