【问题标题】:Flask tutorial: Why do we use the app context for the DB connection?Flask 教程:为什么我们使用应用程序上下文进行 DB 连接?
【发布时间】:2018-01-10 06:48:05
【问题描述】:

我正在研究Flask tutorial,我对使用应用程序上下文连接到数据库感到困惑。在页面上,作者说:

始终创建和关闭数据库连接非常 效率低下,因此您需要将其保留更长时间。因为 数据库连接封装了一个事务,你需要做 确保一次只有一个请求使用该连接。

但是,似乎创建和关闭连接正是代码完成的工作。我们有一个视图get_db,它连接到数据库,返回一个连接对象,如果不存在,则将其添加到应用程序上下文中。我们还有一个close_db 视图,当应用上下文被拆除时关闭连接对象。

我对这里发生的事情的理解如下:用户连接到应用程序的主页,与数据库建立连接,然后关闭它。每次用户向页面发出请求(例如,发布新的博客条目)时,都会与数据库建立新的连接,然后在请求完成时关闭。那么使用应用上下文有什么价值呢?为什么不直接为每个请求创建和关闭连接?

也许我在这里误解了一些东西 - 任何见解都值得赞赏!

【问题讨论】:

    标签: python sqlite flask


    【解决方案1】:

    它的记录很糟糕。但基本上,应用程序上下文的全部意义在于抽象应用程序特定但跨请求的持久数据对象(表面上是为了允许多租户应用程序都是Flask 的独立实例,而无需将所有内容与请求上下文联系起来)。在任何情况下,flask.g 是当前应用上下文的特定于应用上下文的字典。这样,您可以在第一个请求时调用get_db(),将生成的连接对象推入g,然后稍后在应用程序中使用g.dbconn,它不会在每个请求中被杀死(大概你想使用每个页面访问上的相同连接)。我喜欢认为flask.g 就像globals() 的一个类(在这种情况下是应用程序)实例。

    另请参阅:http://flask.pocoo.org/docs/0.12/appcontext/#app-context

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2011-01-04
      • 2020-04-17
      相关资源
      最近更新 更多