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

Cod*_*bie 1 python flask-sqlalchemy

一个菜鸟困惑的问题:

如何以及在哪里设置 pool_size?

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

engine = create_engine('postgresql://me@localhost/mydb',
                       pool_size=20, max_overflow=0)
Run Code Online (Sandbox Code Playgroud)

,但是有没有办法为下面的代码片段设置 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
    ......
    ......
Run Code Online (Sandbox Code Playgroud)

错误如下:

sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30 
Run Code Online (Sandbox Code Playgroud)

Sup*_*oot 6

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

或者,您可以将关键字参数的字典传递给构造函数(docsengine_options )的参数,例如,相当于上面的内容,只不过这些值将与 中定义的任何引擎设置合并并优先于.SQLAlchemy()SQLAlchemy(app, engine_options={"pool_size": 20})SQLALCHEMY_ENGINE_OPTIONS

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