簡體   English   中英

.ini文件加載環境變量

[英].ini file load environment variable

我在Flask項目中使用Alembic進行遷移實施。 有一個alembic.ini文件,其中必須指定數據庫配置:

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

有沒有辦法從環境變量中指定參數? 我試圖以這種方式加載它們$(env_var)但沒有成功。 謝謝!

我已經通過設置解決了這個問題sqlalchemy.urlenv.py作為@dirn建議。

config.set_main_option('sqlalchemy.url', <db_uri>)完成了這個技巧,其中<db_uri>可以從環境或配置文件加載。

我正在尋找一段時間如何為mutli-databases管理這個問題

這就是我做的。 我有兩個數據庫: logsohlc

根據文件 ,我已經設置了類似的蒸餾器

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

希望它可以幫助!

只是為了添加到現有的答案, alembic 教程有這樣的說法:

  • sqlalchemy.url - A URL 通過 ZD233B99A3CCB7F38A27Z26DZ 連接到數據庫。 此配置值僅在 env.py 文件調用它們時使用; 在“通用”模板中,run_migrations_offline() function 中對config.get_main_option("sqlalchemy.url")的調用和run_migrations_offline() ZC1C425268E68389D1AB4A 中對engine_from_config(prefix="sqlalchemy.") run_migrations_online()調用是 thiskeyC1C425268E683895D1AB4A參考。 如果 SQLAlchemy URL 應該來自其他來源,例如來自環境變量或全局注冊表,或者如果遷移環境使用多個數據庫 URL,則鼓勵開發人員更改 env.py 文件以使用任何合適的方法為了獲取數據庫 URL 或 URL。

建立在@dimmg 的回答之上:
可以在env.py文件中覆蓋sqlalchemy.url中指定的alembic.ini

單一數據庫

env.py

插入

config.set_main_option('sqlalchemy.url', <db_uri>)

其中 <db_uri> 可以從環境或配置文件中加載。

多數據庫

env.py

假設您有一個包含數據庫db_adb_b的多數據庫設置,插入

config.set_section_option('db_a', 'sqlalchemy.url', <db_uri_a>)
config.set_section_option('db_b', 'sqlalchemy.url', <db_uri_b>)

其中 <db_uri_a> 和 <db_uri_b> 分別是db_adb_b的數據庫 URI,可以從環境或配置文件中加載。

筆記

還要確保在alembic.ini文件中指出指定的參數在env.py文件中被覆蓋。 對於sqlalchemy.url env.py部分。
這有望在您或合作者稍后返回項目時避免一些困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM