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

2024-04-16 12:01:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

我是烧瓶新手,有人能解释一下为什么会发生这种情况,我该如何解决? 谢谢

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


Tags: runpynoneconfigurldbgetos