Переменная среды загрузки файла .ini

Я использую Alembic для реализации миграции в проекте Flask. Есть файл alembic.ini, в котором должны быть указаны конфиги БД:

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

Есть ли способ указать параметры из переменных среды? Я пытался загрузить их таким образом $(env_var), но безуспешно. Спасибо!


person dimmg    schedule 17.06.2016    source источник
comment
Рассматривали ли вы возможность использования Flask-Migrate?   -  person dirn    schedule 18.06.2016
comment
@dirn Я использую sqlalchemy с декларативной базой, но, насколько я знаю, Flask-Migrate совместим только с Flask-SQLAlchemy   -  person dimmg    schedule 18.06.2016
comment
Ты прав. Наверное, я просто предположил, что ты его используешь. Почему бы вместо этого не установить sqlachemy.url в env.py?   -  person dirn    schedule 18.06.2016


Ответы (2)


Я решил проблему, установив sqlalchemy.url в env.py, как предложил @dirn.

config.set_main_option('sqlalchemy.url', <db_uri>) сделал свое дело, где <db_uri> можно загрузить из среды или файла конфигурации.

person dimmg    schedule 17.06.2016
comment
Можете ли вы предоставить больше информации о своем решении? Я не уверен, где находится этот файл env.py. - person Cruncher; 31.08.2018
comment
@Cruncher В каталоге alembic вашего проекта см. alembic.zzzcomputing.com/en/latest/ учебник.html - person Bunyk; 29.10.2018

Я некоторое время искал, как управлять этим для mutli-баз данных

Вот что я сделал. У меня есть две базы данных: журналы и ohlc.

Согласно документу, я настроил перегонный куб как это

alembic init --template multidb

перегонный куб.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:[email protected]:5432/logs
    ohlc: postgresql://botcrypto:[email protected]:5432/ohlc

использование

SETTINGS=config.yml alembic upgrade head

Надеюсь, это может помочь!

person Constantin De La Roche    schedule 13.12.2018