Mat*_*ham 8 python sqlite flask
我正在研究Flask教程,并对使用应用程序上下文连接数据库感到困惑.在页面上,作者说:
始终创建和关闭数据库连接的效率非常低,因此您需要将其保留更长时间.由于数据库连接封装了事务,因此您需要确保一次只有一个请求使用该连接.
但是,创建和关闭连接似乎正是代码所完成的.我们有一个视图get_db连接到数据库,返回一个连接对象,并将其添加到应用程序上下文(如果不存在).我们还有一个close_db视图,当应用程序上下文被拆除时关闭连接对象.
我对这里发生的事情的理解如下:用户连接到应用程序的主页,建立与数据库的连接,然后关闭它.每次用户向页面发出请求(例如,发布新的博客条目)时,与数据库建立新连接,然后在请求完成时关闭.那么使用应用程序上下文的价值是什么呢?为什么不直接为每个请求创建和关闭连接?
也许我在这里误解了一些东西 - 任何洞察力都赞赏!
记录不良。但是,基本上,应用程序上下文的重点是抽象特定于应用程序但持久性跨请求的数据对象(表面上允许多租户应用程序都是单独的实例,Flask而无需将所有内容都绑定到请求上下文)。在任何情况下,flask.g当前应用程序上下文的特定于应用程序上下文的字典。这样,您可以调用get_db()第一个请求,将生成的连接对象推入g,然后g.dbconn在应用程序中稍后使用,这不会在每个请求上都被杀死(大概您希望在每个页面访问中使用相同的连接)。我喜欢认为flask.g它类似于的类实例(在这种情况下为应用程序)globals()。
另请参阅:http : //flask.pocoo.org/docs/0.12/appcontext/#app-context