python - Flask:如何管理不同环境的数据库?

标签 python flask flask-sqlalchemy

我正在开发一个看起来类似于

的应用程序
facebook/
         __init__.py
         feed/
             __init__.py
             business.py
             views.py
             models/
                    persistence.py
                    user.py
         chat/
             __init__.py
             models.py
             business.py
             views.py
         config/
                dev.py
                test.py
                prod.py 

我想要三个环境 DevTestProduction
我有以下要求:
a.) 当我启动服务器 python runserver.py 时,我想提及我要连接哪个环境 - DevTest生产
b.) Dev & Production 应该构建了模式,只需要连接到机器
c.) 我还希望我的测试连接到 sqlite db,并创建模式,运行测试

我怎样才能以配置方式实现这一点,这样我就不必对与数据库相关的任何内容进行硬编码。

flask有什么好的模式可用吗?

目前我的 runerver.py 对我不喜欢的环境进行了硬编码,

app = Flask(__name__)
app.config['SECRET_KEY'] = dev.SECRET_KEY

我正在寻找比我更好的想法

最佳答案

我使用的解决方案:

#__init__.py
app = Flask(__name__)
app.config.from_object('settings')
app.config.from_envvar('MYCOOLAPP_CONFIG',silent=True)

在应用程序加载的同一级别:

#settings.py
SERVER_NAME="dev.app.com"
DEBUG=True
SECRET_KEY='xxxxxxxxxx'


#settings_production.py
SERVER_NAME="app.com"
DEBUG=False

所以。 如果环境变量 MYCOOLAPP_CONFIG 不存在 -> 只有 settings.py 会加载,这是指默认设置(开发服务器对我来说)
这就是“silent=True”的原因,不需要第二个配置文件,而 settings.py 是开发的默认值,并且具有通用配置键的默认值

如果除了其中的第一个值之外还会加载任何其他 settings_file,它将覆盖原始值中的值。 (在我的示例中,DEBUG 和 SERVER_NAME 将被覆盖,而 SECRET_KEY 对所有服务器保持不变)

您唯一应该自己发现的事情取决于您启动应用程序的方式
在启动 ENVVAR 之前,应设置 MYCOOLAPP_CONFIG
例如,我使用主管守护进程运行,在生产服务器上,我只是将其放入主管配置文件中:

environment=MYCOOLAPP_CONFIG="/home/tigra/mycoolapp/settings_production.py"

通过这种方式,您可以轻松管理所有配置文件,此外,通过这种方式,您可以从 git 或任何其他版本控制实用程序中排除这些文件

启动前在控制台中的默认 Linux 方式是:
export MYCOOLAPP_CONFIG="/home/tigra/mycoolapp/settings_production.py"

关于python - Flask:如何管理不同环境的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603240/

相关文章:

python - Flask-Script : from flask. _compat import text_type ModuleNotFoundError: No module named 'flask._compat'

python - 在heroku上使用python Flask运行chrome驱动程序(pyppeteer)

python - "Two-to-many"与 Flask-SQLAlchemy 的关系

python - NLTK 中具有非对称填充的 Ngram

python - 如何限制 Python 进程的 I/O 消耗(可能使用 ionice)?

python - 比较元组值

python - 属性错误 : type object 'User' has no attribute 'query'

python - Pytest - 错误与失败

python - 使用 fsolve 求解

sqlalchemy - 计算 sqlalchemy 模型中的相关项目