Flask-SQLAlchemy:SQLALCHEMY_ENGINE_OPTIONS设置不正确

时间:2019-05-23 08:31:17

标签: python flask sqlalchemy flask-sqlalchemy

我刚刚将项目Flask-SQLAlchemy版本更新为最新版本(v2.4)。由于不建议使用某些SQL-Alchemy配置参数,因此我现在按照文档进行操作,并将SQLALCHEMY_ENGINE_OPTIONS作为字典添加到我的配置类中。但是,当我尝试查询数据库时,出现错误。

我正在查找sql​​alchemy的create_engine()所需的确切关键字。

这是我的配置类:

class ConfigAPI:

    try:

        SQLALCHEMY_DATABASE_URI = os.environ['MYSQL_URI']

    except KeyError as e:

        logging.warning('FAILED DEFINING MYSQL PARAMETER')

        logging.fatal(e)

        sys.exit(1)

    SECRET_KEY = '123456asdsadfsdfasadfa67893nvkabl790'
    SQLALCHEMY_ECHO = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ENGINE_OPTIONS = {
                                'pool': QueuePool,
                                 'pool_size' : 10,
                                 'pool_recycle':120,
                                 'pool_pre_ping': True
                                 }

这是我的app_factory文件

db = SQLAlchemy()

def create_api(config=ConfigAPI):
    app = Flask(__name__)

    from app_projects.internal_api.api_v0 import blueprint as v0
    app.config.from_object(config)
    db.init_app(app)
    cors.init_app(app)
    app.register_blueprint(v0)

    return app

这是我收到的错误:

TypeError: Invalid argument(s) 'pool_size','pool_recycle','pool_pre_ping' sent to create_engine(), using configuration MySQLDialect_pymysql/type/Engine.  Please check that the keyword arguments are appropriate for this combination of components.

我在这里想念什么?

1 个答案:

答案 0 :(得分:2)

正如您已经在注释中提到的那样,问题出在pool参数中。

SQLAlchemy documentation指定PoolQueuePool实例是一个pool参数。

有效的示例是:

SQLALCHEMY_ENGINE_OPTIONS = {
    'pool': QueuePool(creator),
    'pool_size': 10,
    'pool_recycle': 120,
    'pool_pre_ping': True
}