提问: config.ini 文件里面如何配置 json 格式的数据?

38次阅读

共计 1176 个字符,预计需要花费 3 分钟才能阅读完成。

一、说明

Flask 项目使用的配置文件是 config.ini,示例:

[flask]
FLASK_APP=run.py
FLASK_ENV=produce
FLASK_PORT=8000
SECRET_KEY=''

[local]
DEBUG=1
DATABASE_URL=mysql://root:[email protected]:3306/database_local
SQLALCHEMY_POOL_RECYCLE=3600

[test]
DEBUG=1
DATABASE_URL=mysql://root:[email protected]:3306/database_test
SQLALCHEMY_POOL_RECYCLE=3600

[produce]
DEBUG=0
DATABASE_URL=mysql://root:[email protected]:3306/database_produce
SQLALCHEMY_POOL_RECYCLE=600

二、问题描述

flask-sqlalchemy 3.1 版本 SQLALCHEMY_POOL_RECYCLE 配置被移除了,变成如下方式:

SQLALCHEMY_ENGINE_OPTIONS = {"pool_recycle": 600,}

目前的解决方式是写在读取配置文件的类里面:

import configparser
import os

cf = configparser.ConfigParser()
config_dir = os.path.dirname(os.path.abspath(__file__))

cf.read(os.path.join(config_dir, "config.ini"))


class Config:

    # Flask
    FLASK_ENV = cf.get("flask", "FLASK_ENV")
    SECRET_KEY = cf.get("flask", "SECRET_KEY")
    FLASK_PORT = cf.getint("flask", "FLASK_PORT")
    DEBUG = True if cf.getint(FLASK_ENV, "DEBUG") else False

    # SQLALCHEMY
    SQLALCHEMY_DATABASE_URI = cf.get(FLASK_ENV, "DATABASE_URL")
    SQLALCHEMY_ENGINE_OPTIONS = {"pool_recycle": 600} # 这样就无法区分 local、test、produce 环境

但是,这样写会导致一个问题——local、test、produce 三个环境都使用了相同的 pool_recycle,不满足需求。 请问在 config.ini 里面如何根据不同的环境配置不同的 SQLALCHEMY_ENGINE_OPTIONS(或 pool_recycle)?

请各位大佬指点指点,谢谢。

正文完
 0