烧瓶应用程序看不到环境变量

时间:2021-01-29 20:43:17

标签: python flask flask-sqlalchemy python-venv dotenv

为了在 ProstgreSQL 数据库中创建表,Flask 应用程序没有从 .env 获取 SQLALCHEMY_DATABASE_URI 值。

这里的配置:

import os

class Config(object):
    DEBUG = False
    TESTING = False
    CSRF_ENABLED = True
    SECRET_KEY = os.environ.get('SECRET_KEY')
    SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
...

我试过了

>>> from app.extensions import db
>>> db.create_all()

>>> from app import create_app 
>>> app = create_app()
>>> from app.extensions import db
>>> db.create_all()

>>> from app import create_app
>>> app=create_app()
>>> app.app_context().push() 
>>> from app.extensions import db
>>> db.create_all()

在我的 Stackoverflow 朋友的帮助下,我进入了工作过程:

>>> from dotenv import load_dotenv
>>> load_dotenv()
>>> import os
>>> os.getenv('SQLALCHEMY_DATABASE_URI')
>>> from app import create_app
>>> app = create_app()
>>> app.app_context().push()   
>>> from app.extensions import db
>>> db.create_all()

问题:错误在哪里? config.pyimport os 行。 python_dotenv 已安装。我应该怎么做才能避免使用上面 proc 中的前四行?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

直到 load_dotenv().env 中的任何内容都会被忽略。问题是在哪里做load_dotenv()。它必须在任何人接触到 os.environ 并期待 .env 出现在那里之前发生。

通常的地方,如果你遵循 Flask Mega 教程中的模式,就在之前

class Config(object):

例如,https://github.com/miguelgrinberg/microblog/blob/v0.15/config.py