【问题标题】:SQLAlchemy / Flask / PostgreSQL pool connectionSQLAlchemy / Flask / PostgreSQL 池连接
【发布时间】:2013-04-03 01:50:38
【问题描述】:

在与 Django 玩了很长时间之后,我正在尝试一些 Flask 和 SQLAlchemy,我必须说我非常喜欢它。但是有一些我没有得到的东西: 我有一个使用 PostgreSQL 的小型 Flask / SQLAlchemy 应用程序。 在我的__init__.py 文件中,我有:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('settings')
db = SQLAlchemy(app)

我想知道:

  1. 是否有自动连接池?还是每次调用 Model.query... 都会创建到数据库的新连接?
  2. 如果没有,我该如何配置?
  3. 如果是,默认值是多少,如何修改这些值?

非常感谢您的帮助!

【问题讨论】:

    标签: postgresql sqlalchemy flask flask-sqlalchemy


    【解决方案1】:

    Flask-SQLAlchemy 使用 SQLAlchemy 中的 create_engine 方法创建一个 SQLAlchemy 引擎,您可以在 documentation for the create_engine function 中了解一些选项和默认值。 According to the Flask-SQLAlchemy documentation,您可以指定一些特定于池的配置选项。您可以通过多种方式设置这些值,您可以在Flask configuration 中了解这些信息。您已经有一个 settings 配置模块,因此您可以在配置文件中添加类似...

    SQLALCHEMY_POOL_SIZE=10
    

    所以,是的,有自动连接池。 This is provided by SQLAlchemy by default。在发布此答案时,Flask-SQLAlchemy 允许您使用配置文件修改这些选项中的一些(尽管看起来有一个旧的pull request to allow you to specify ANY create_engine parameter)。

    如果您需要比 Flask-SQLAlchemy 提供的更多支持来配置 SQLAlchemy 引擎,您可以使用没有 Flask-SQLAlchemy 包装器的 SQLAlchemy,或者修改 Flask-SQLAlchemy(可能合并拉取请求)以允许这样做。

    【讨论】:

    • 非常感谢您的详细解答!我一定错过了 Flask-SQLAlchemy 文档中的这一部分!
    • 知道如何将连接池设置为NullPool 吗?
    【解决方案2】:

    您的烧瓶实例的每个工作人员运行一个具有多个工作人员的适当 wsgi 服务器都将拥有自己的引擎 - 因为您的脚本是为每个工作人员单独加载的。

    因此,您根本无法控制真正的池,除非您限制 wsgi 服务器的工作线程并计算每个引擎/池实例允许的最大连接数。

    更多详情可以阅读https://docs.sqlalchemy.org/en/13/core/pooling.html#using-connection-pools-with-multiprocessing

    【讨论】:

    • 这是一个关键点。默认的POOL_SIZE 是 5,当我直接检查我的数据库连接并看到有 15 个连接时,我真的很困惑(我正在使用 gunicorn 和 4 个工作人员)。在读到这篇文章之前,我不知道为什么。谢谢!
    【解决方案3】:

    可以在create_engine方法上设置NullPool

    ` from sqlalchemy.pool import NullPool
      engine = create_engine('db connection url',poolclass=NullPool)`
    

    【讨论】:

    • 这没有回答 OP 的问题。
    • @SuperShoot 回答了其中一个 cmets 的一部分。他们曾询问如何将其设置为空池
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2014-10-26
    • 2010-11-25
    • 2019-12-13
    • 2015-07-28
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多