0

过去一周我一直在玩 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 的一部分加载?

4

1 回答 1

1

首先加载您的设置,然后再处理其他任何内容。如果要根据请求切换 DB,则需要将其放入if模型/视图逻辑中。

根据文档(您的设置看起来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你的设置中的一个是合适的。

于 2013-03-07T12:33:37.243 回答