过去一周我一直在玩Flask。为了好玩,我正在尝试实现以下内容。是的,我知道这是非常Django式的,也许不适合微框架。
以下是我正在尝试做的一个示例:
STATIC_PATH = '/static/'
TEMPLATE_URL = '/template/'
DATABASES = {
'DEBUG': {
'ENGINE': 'bla.sqlite3',
'NAME': 'koopics.db'
},
'DEMO': {
'ENGINE': 'bla.sqlite3',
'NAME': 'somedb'
},
'PRODUCTION': {
'ENGINE': 'bla.psycopg2',
'NAME': 'somedb',
'host': 'host',
'username': 'host',
'password': 'host',
},
}
MODE = 'Demo'
#TODO: put an IF statement here to provide the connection mechanism for the db
# depending on what is required
INSTALLED_APPS = [
'Flask-SQLAlchemy',
'Flask-DebugToolbar',
'Flask-Mail',
'Flask-Cache',
'Flask-Celery',
'my_custom_module',
]
我目前使用__init__.py
在自己的文件夹中定义了自定义应用。
问题:是否可以让数据库运行并将“应用”作为设置和app.py的一部分加载?
答案 0 :(得分:1)
在处理任何其他内容之前,首先加载您的设置。如果要根据请求切换DB,则需要将此if
放在模型/视图逻辑中。
根据docs(您的设置看起来更像django
而不是常规flask
所以我不确定这是否会有效)您可以使用__bind_key__
在您的模型中将该模型定向到特定的数据库
# settings.py
SQLALCHEMY_BINDS = {
'DEBUG': 'sqlite:////path/to/koopics.db',
'DEMO': 'sqlite:////path/to/somedb.db'
}
并在您的模型中
# model
class DebugModel(db.Model):
__bind_key__ = 'DEBUG'
id = db.Column(db.Integer, primary_key=True)
debug_value = db.Column(db.String(80), unique=True)
但是,如果你的意思是你想让它以一种方式访问数据库进行生产,而另一种方式进行开发,那么
import os
if os.environ('MACHINE_NAME', '') == 'PRODUCTION':
# set up production db
else:
# set up development db
然后您设置中的if
是合适的。