为什么需要teardown_appcontext才能关闭数据库连接?

时间:2016-11-08 18:06:51

标签: python database flask python-db-api

根据flask docs,我们应该在应用程序上下文断开时关闭数据库连接:

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消失)?我以为会自动关闭连接(因为db驱动程序会close the connection on del)。明确关闭连接有什么好处?

1 个答案:

答案 0 :(得分:1)

当连接的引用丢失时,它仍然不会关闭连接。

许多数据库也维护打开的连接,如果你没有“通知”连接已关闭,那么数据库端仍然存在连接并继续使用资源等。

这不是特定于python或flask。