[英].ini file load environment variable
我在Flask
項目中使用Alembic進行遷移實施。 有一個alembic.ini
文件,其中必須指定數據庫配置:
sqlalchemy.url = driver://user:password@host/dbname
有沒有辦法從環境變量中指定參數? 我試圖以這種方式加載它們$(env_var)
但沒有成功。 謝謝!
我已經通過設置解決了這個問題sqlalchemy.url
在env.py
作為@dirn建議。
config.set_main_option('sqlalchemy.url', <db_uri>)
完成了這個技巧,其中<db_uri>
可以從環境或配置文件加載。
我正在尋找一段時間如何為mutli-databases管理這個問題
這就是我做的。 我有兩個數據庫: logs和ohlc
根據文件 ,我已經設置了類似的蒸餾器
alembic init --template multidb
databases = logs, ohlc
[logs]
sqlalchemy.url = postgresql://botcrypto:botcrypto@localhost/logs
[ohlc]
sqlalchemy.url = postgresql://botcrypto:botcrypto@localhost/ohlc
[...]
# 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')
[...]
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_a
和db_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_a
和db_b
的數據庫 URI,可以從環境或配置文件中加載。
還要確保在alembic.ini
文件中指出指定的參數在env.py
文件中被覆蓋。 對於sqlalchemy.url
env.py
部分。
這有望在您或合作者稍后返回項目時避免一些困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.