在与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)
我想知道:
非常感谢你的帮助!
答案 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)`