Flask 应用程序看不到环境变量

environ variable not visible to flask app

Flask 应用程序无法从 .env 获取 SQLALCHEMY_DATABASE_URI 值以便在 ProstgreSQL 数据库中创建表。

配置如下:

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()

在 Whosebug 上的朋友们的帮助下,我开始工作了:

>>> 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()

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

非常感谢任何帮助。

直到 load_dotenv().env 中的任何内容都将被忽略。问题是在哪里做 load_dotenv()。它必须发生在任何人进入 os.environ 期待 .env 的东西出现之前。

如果您遵循 Flask Mega 教程中的模式,通常的位置就在

之前
class Config(object):

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