18

在与 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. 如果是,默认值是什么,我该如何修改这些值?

非常感谢您的帮助!

4

3 回答 3

18

Flask-SQLAlchemy 使用 SQLAlchemy 中的方法创建一个 SQLAlchemy 引擎,您可以在 create_engine 函数create_engine的文档中阅读一些选项和默认值。根据 Flask-SQLAlchemy 文档,您可以指定一些特定于池的配置选项。您可以通过各种方式设置这些值,您可以在Flask 配置中了解这些信息。您已经有一个配置模块,因此您可以在配置文件中添加类似...settings

SQLALCHEMY_POOL_SIZE=10

所以,是的,有自动连接池。这是由 SQLAlchemy 默认提供的。在发布此答案时,Flask-SQLAlchemy 允许您使用配置文件修改其中一些选项(尽管似乎有一个旧的拉取请求允许您指定任何 create_engine 参数)。

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

于 2013-04-11T01:44:53.107 回答
2

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

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

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

于 2020-04-07T11:34:01.000 回答
-4

NullPool 可以在 create_engine 方法上设置

` from sqlalchemy.pool import NullPool
  engine = create_engine('db connection url',poolclass=NullPool)`
于 2018-11-09T17:33:02.747 回答