SQLAlchemy / Flask / PostgreSQL池连接

时间:2013-04-11 01:01:45

标签: postgresql sqlalchemy flask flask-sqlalchemy

在与Django玩了很长时间之后,我正在尝试使用SQLAlchemy的一些Flask,我必须说我非常喜欢它。但是有一些我没有得到的东西: 我有一个使用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 个答案:

答案 0 :(得分:10)

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)。

如果您需要更多支持配置SQLAlchemy引擎而不是Flask-SQLAlchemy提供,您可以使用SQLAlchemy而不使用Flask-SQLAlchemy包装器,或者修改Flask-SQLAlchemy(可能合并拉取请求)以允许此操作。

答案 1 :(得分:0)

烧瓶实例中运行适当的wsgi服务器且有多个工作程序的每个工作程序都有其自己的引擎-因为脚本是分别为每个工作程序加载的。

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

更多详细信息,请访问https://docs.sqlalchemy.org/en/13/core/pooling.html#using-connection-pools-with-multiprocessing

答案 2 :(得分:-1)

可以在create_engine方法上设置NullPool

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