Flask-SQLAlchemy: как передать параметры в create_engine (), например pool_size? - PullRequest
0 голосов
/ 01 октября 2019

Смущенный вопрос новичка:

Как и где установить 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 Ответ

1 голос
/ 01 октября 2019

Если вы используете> = версию 2.4, ключ SQLALCHEMY_ENGINE_OPTIONS существует специально для указания аргументов ключевого слова, которые будут переданы в create_engine ( docs ). Так что в вашем случае добавление app.config["SQLALCHEMY_ENGINE_OPTIONS"] = {"pool_size": 20} в конфигурацию вашего приложения должно помочь.

В качестве альтернативы, вы можете передать вхождение аргументов ключевых слов в параметр engine_options конструктора SQLAlchemy() ( docs). ), например, SQLAlchemy(app, engine_options={"pool_size": 20}) эквивалентно приведенному выше, за исключением того, что эти значения будут объединяться и иметь приоритет над любыми настройками двигателя, также определенными в SQLALCHEMY_ENGINE_OPTIONS.

Наконец, есть набор SQLALCHEMY_ Префиксные ключи конфигурации, которые устарели, но будут работать до 3.0. В этом случае app.config["SQLALCHEMY_POOL_SIZE"] = 20. Если вы не используете версию более раннюю, чем 2.4, было бы лучше использовать один из предыдущих вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...