在Python/Flask应用中存储数据库位置和凭证变量

0 投票
1 回答
2373 浏览
提问于 2025-04-29 15:43

我正在学习一个关于如何用Python和Flask构建应用的在线教程。在我安装Postgres并弄乱我的数据库之前,我可以毫无问题地从命令行启动我的应用。但现在,每次我重启命令提示符时,都必须重新定义APP_SETTINGS和DATABASE_URL这两个变量。虽然在我重新定义这些变量后,应用可以正常工作,但我知道这不是正确的做法。下面是我遇到的错误:

 Traceback (most recent call last):
 File "app.py", line 12, in <module>
 app.config.from_object(os.environ['APP_SETTINGS'])
 File "C:\envs\acme\lib\os.py", line 423, in __getitem__
 return self.data[key.upper()]
 KeyError: 'APP_SETTINGS'

然后我会用“set”命令重新定义这个变量:

set APP_SETTINGS=config.DevelopmentConfig

这是我在app.py和config.py中使用的代码:

config.py:

import os
# default config
class BaseConfig(object):
    DEBUG = False
    SECRET_KEY = 'secret key'
    SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']

class DevelopmentConfig(BaseConfig):
    DEBUG = True

class ProductionConfig(BaseConfig):
    DEBUG = False

app.py:

import os
app.config.from_object(os.environ['APP_SETTINGS'])

在config.py文件中,DATABASE_URL变量也是同样的问题。我还遇到了KEYERROR错误,必须用“set”命令重新定义这个变量,并且还要输入我的用户名和密码:

set DATABASE_URL=postgres://username:password@localhost/discover_flask_dev

我使用的是Windows 8和Python 2.7。在我的环境中安装了这些工具:

Flask==0.10.1
Flask-SQLAlchemy==2.0
Jinja2==2.7.3
MarkupSafe==0.23
SQLAlchemy==0.9.8
Werkzeug==0.9.6
gunicorn==19.1.1
ipython==2.3.0
itsdangerous==0.24
psycopg2==2.5.2
pyreadline==2.0

我想应该有一个基本的方法来解决我上面提到的问题。请给点建议。谢谢!

暂无标签

1 个回答

1

你的主要问题似乎是“每次我重启命令提示符时,都必须重新定义APP_SETTINGS和DATABASE_URL这两个变量”。

根据这个超级用户的回答,看起来有两个环境变量的命令:SET(在命令窗口关闭时会失效)和SETX(在命令窗口关闭后仍然有效)。

你可以用
set DATABASE_URL=postgres://username:password@localhost/discover_flask_dev

来设置变量,但这样做每次重启后都会失效。

试试用
setx DATABASE_URL "postgres://username:password@localhost/discover_flask_dev"

注意这两者的语法稍有不同:SETX使用双引号"..",而且不需要等号=

撰写回答