我在 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中的环境变量。
alembic 修订--autogenerate -m“初始迁移”