Почему для закрытия соединения с БД требуется teardown_appcontext?

Согласно документам flask, мы должны закрыть соединение с базой данных, когда контекст приложения разрывается:

def get_db():
    """Opens a new database connection if there is none yet for the
    current application context.
    """
    if not hasattr(g, 'sqlite_db'):
        g.sqlite_db = connect_db()
    return g.sqlite_db

@app.teardown_appcontext
def close_db(error):
    """Closes the database again at the end of the request."""
    if hasattr(g, 'sqlite_db'):
        g.sqlite_db.close()

Но разве удаление контекста приложения не удалит (единственную) ссылку на соединение с базой данных (поскольку g.sqlite_db исчезает, когда g исчезает)? Я думал, что это автоматически закроет соединение (поскольку драйвер базы данных закроет соединение на del ). В чем преимущество явного закрытия соединения?


person max    schedule 08.11.2016    source источник


Ответы (1)


Когда ссылка на соединение потеряна, оно все равно не закрывает соединение.

Многие базы данных также поддерживают открытые соединения, если вы не «сообщите» ему, что соединение закрыто, соединение все еще будет существовать на стороне базы данных и продолжит использовать ресурсы и т. д.

Это не относится к python или flask.

person Tzvika Mordoch    schedule 24.03.2018