【问题标题】:Flask before_request and teardown_request for DB connections用于数据库连接的 Flask before_request 和 teardown_request
【发布时间】:2013-12-25 19:08:30
【问题描述】:

根据 Flaskr 教程,db connection 应该在每个 session 之前打开和关闭:

@app.before_request
def before_request():
  g.db = connect_db()

@app.teardown_request
def teardown_request(exception):
  db = getattr(g, 'db', None)
  if db is not None:
    db.close()

但是,使用 sqlite3 时就是这种情况。

我的问题是:使用 postressql 和 SqlAlchemy 时 - 是否需要以相同的方式打开和关闭连接,还是 SQLAlchemy 会自动处理连接管理?

【问题讨论】:

  • Flask-SQLAlchemy 为你管理一个数据库连接池,所以你不必担心这些。
  • 感谢米格尔。跟进:在使用 sqlalchemy 和 postgres 时,是否需要为模型显式定义一个 init 构造函数?在您的大型教程中,您没有使用一个,但是当我省略 init 时,我得到一个“TypeError:__init__() 恰好需要 1 个参数(给定 5 个)”错误。
  • SQLAlchemy 还为您的模型提供了默认构造函数。此默认构造函数采用 **kwargs 初始化模型的属性。我不明白为什么你会得到TypeError,查看堆栈跟踪以查看带有一个参数的__init__() 构造函数在哪里,这不是SQLAlchemy 定义的构造函数类型。

标签: postgresql sqlalchemy flask psycopg2 flask-sqlalchemy


【解决方案1】:

SQLAlchemy 不知道您的 Flask 应用程序。所以,如果你想使用纯 SQLAlchemy,你需要管理连接。

在没有足够的数据库连接、持久连接和连接池知识的情况下自行处理这些主题可能会导致性能非常差和错误。 最佳实践是使用Flask-SQLAlchemy 抽象数据库连接管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多