.ini 文件加载环境变量

Posted

技术标签:

【中文标题】.ini 文件加载环境变量【英文标题】:.ini file load environment variable 【发布时间】:2016-10-19 19:20:56 【问题描述】:

我在 Flask 项目中使用 Alembic 进行迁移实施。有一个alembic.ini 文件,其中必须指定数据库配置:

sqlalchemy.url = driver://user:password@host/dbname

有没有办法从环境变量中指定参数?我试图以这种方式加载它们$(env_var),但没有成功。谢谢!

【问题讨论】:

@Oz123, sqlalchemy.url = $(DB_SERVICE):/$(DB_USER):$(DB_PASS)@$(DB_HOST)/$(DB_NAME) 你考虑过使用Flask-Migrate吗? @dirn 我正在使用带有声明性基础的 sqlalchemy,但据我所知 Flask-Migrate 仅与 Flask-SQLAlchemy 兼容 你是对的。我想我只是假设你正在使用它。为什么不在env.py 中设置sqlachemy.url 【参考方案1】:

我已经按照@dirn 的建议在env.py 中设置sqlalchemy.url 解决了这个问题。

config.set_main_option('sqlalchemy.url', <db_uri>) 成功了,<db_uri> 可以从环境或配置文件中加载。

【讨论】:

您能否为您的解决方案提供更多信息?我不确定这个 env.py 文件在哪里。 @Cruncher 在项目的 alembic 目录中,请参阅 alembic.zzzcomputing.com/en/latest/tutorial.html【参考方案2】:

我一直在寻找如何为多数据库管理这个

这就是我所做的。我有两个数据库:logsohlc

根据doc, 我已经设置了这样的蒸馏器

alembic init --template multidb

alembic.ini

databases = logs, ohlc
[logs]
sqlalchemy.url = postgresql://botcrypto:botcrypto@localhost/logs
[ohlc]
sqlalchemy.url = postgresql://botcrypto:botcrypto@localhost/ohlc

env.py

​​>
[...]
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

# Interpret the config file for Python logging.
# This line sets up loggers basically.
fileConfig(config.config_file_name)
logger = logging.getLogger('alembic.env')

# overwrite alembic.ini db urls from the config file
settings_path = os.environ.get('SETTINGS')
if settings_path:
    with open(settings_path) as fd:
        settings = conf.load(fd, context=os.environ) # loads the config.yml
    config.set_section_option("ohlc", "sqlalchemy.url", settings["databases"]["ohlc"])
    config.set_section_option("logs", "sqlalchemy.url", settings["databases"]["logs"])
else:
    logger.warning('Environment variable SETTINGS missing - use default alembic.ini configuration')
[...]

config.yml

databases:
    logs: postgresql://botcrypto:botcrypto@127.0.0.1:5432/logs
    ohlc: postgresql://botcrypto:botcrypto@127.0.0.1:5432/ohlc

用法

SETTINGS=config.yml alembic upgrade head

希望对你有帮助!

【讨论】:

以上是关于.ini 文件加载环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在金字塔ini文件中使用系统环境变量?

如何在配置文件中定义的 PowerShell 脚本中设置环境变量?

NPM库:dotenv,从文件加载环境变量

Linux环境变量加载顺序

thinkphp5.0环境变量配置

使用环境变量加载文件 Jenkins Pipeline