【问题标题】:environ variable not visible to flask app烧瓶应用程序不可见环境变量
【发布时间】:2021-05-03 18:48:21
【问题描述】:

Flask 应用没有从 .env 获取 SQLALCHEMY_DATABASE_URI 值,以便在 ProstgreSQL db 中创建表。

这是配置:

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中的前四行?

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    class Config(object):
    

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

    【讨论】:

    • Dave,我根据 Grinberg 的教程修改了config。不幸的是,删除 proc 中的前四行并在config 中依赖相同的行给了我旧的不令人满意的结果:>>> from app import create_app>>> app = create_app()>>> app.app_context().push()>>> from app.extensions import db>>> db.create_all()Traceback (most recent call last):`File " ",第 1 行,在 ` ... AttributeError: 'NoneType' object has no attribute 'drivername' >>>
    • 戴夫,多亏了你,我走上了正轨。我不得不调整路径调用中更复杂的目录结构。事情现在正在运行。再次感谢。
    猜你喜欢
    • 2016-03-09
    • 2015-04-04
    • 2019-10-25
    • 2021-06-29
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多