Alembic env.py 不读取 Flask 项目中的环境变量

问题描述 投票:0回答:1

我在 PyCharm IDE 的 Flask 项目中使用 Alembic,我想使用环境变量而不是在 alembic.ini 文件中存储数据库配置。

这是我修改后的env.py

import os
...

def get_url():
    return f'mysql+pymysql://{os.getenv("DB_UID", "username")}:{os.getenv("DB_PWD", "password")}@{os.getenv("DB_SERVER", "host")}/{os.getenv("DB_NAME", "db")}'


def run_migrations_offline():
    ...

    #url = config.get_main_option("sqlalchemy.url")
    url = get_url()
    print(url)

    ...

def run_migrations_online():

    # connectable = engine_from_config(
    #     config.get_section(config.config_ini_section),
    #     prefix="sqlalchemy.",
    #     poolclass=pool.NullPool,
    # )

    url = get_url()
    print(url)
    connectable = create_engine(url)

    ...

这就是它打印的内容:

mysql+pymysql://username:password@host/db

但在读取我项目的 config.py 中的环境变量时它工作正常。 这是结构:

project/
    alembic/
        versions/
        env.py
        README
        script.py.mako
    app/
    alembic.ini
    config.py
    run.py

config.py:

import os

class Config(object):

    #DB CONFIG
    serverDB = os.getenv('DB_SERVER', None)
    nameDB = os.getenv('DB_NAME', None)
    pwdDB = os.getenv('DB_PWD', None)
    uidDB = os.getenv('DB_UID', None)
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://'+uidDB+':'+pwdDB+'@'+serverDB+'/'+nameDB

我是 Flask 新手,有人可以解释一下为什么会发生这种情况以及如何解决吗? 谢谢

编辑:如果我使用终端设置环境变量,它就可以正常工作。所以问题是读取PyCharm中的环境变量。

python environment-variables alembic
1个回答
0
投票

alembic 修订--autogenerate -m“初始迁移”

© www.soinside.com 2019 - 2024. All rights reserved.