Flask-SQLAlchemy:如何将参数传递给create_engine(),例如pool_size?

时间:2019-10-01 06:44:37

标签: python flask-sqlalchemy

菜鸟的困惑问题:

如何以及在哪里设置pool_size?

我发现在文档中将池大小设置为:

engine = create_engine('postgresql://me@localhost/mydb',
                       pool_size=20, max_overflow=0)

,但是如果愿意的话,还有一种方法可以为以下代码段设置pool_size?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/testdb'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username
    ......
    ......

错误如下:

sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30 

1 个答案:

答案 0 :(得分:1)

如果使用的是> =版本2.4,则SQLALCHEMY_ENGINE_OPTIONS键专门用于指定将要传递给create_enginedocs)的关键字参数。因此,在您的情况下,向应用配置中添加app.config["SQLALCHEMY_ENGINE_OPTIONS"] = {"pool_size": 20}应该可以解决问题。

或者,您可以将关键字参数的字典传递给engine_options构造函数(docs)的SQLAlchemy()参数,例如,SQLAlchemy(app, engine_options={"pool_size": 20})与上面的等效这些值将与SQLALCHEMY_ENGINE_OPTIONS中定义的所有引擎设置合并并优先于它们。

最后,有一套SQLALCHEMY_前缀的配置密钥已被弃用,但可以使用到3.0。在这种情况下,app.config["SQLALCHEMY_POOL_SIZE"] = 20。除非您使用的版本早于2.4,否则最好使用以前的选项之一。

相关问题