如何在运行时配置Django DATABASES设置?

时间:2012-06-29 08:15:07

标签: database django settings

这些天我正在研究如何在BAE上进行编程。 BAE是像GAE这样的云平台。它支持python 2.7和MySQL。但是存在问题,BAE在请求中提供DATABASE信息。我可以这样设置:

port = request.META['HTTP_BAE_ENV_ADDR_SQL_PORT']

但是如何在运行时配置DATABASES设置?

我试图为这个问题编写一个中间件,如下所示:

from  django.conf import settings

class bae_database(object):
    def process_request(self, request):
        BAE_DB = {
            'default': {
                'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
                'NAME': 'django',                      # Or path to database file if using sqlite3.
                'USER': 'root',                      # Not used with sqlite3.
                'PASSWORD': '',                  # Not used with sqlite3.
                'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
                'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.
            },
        } 
        settings.DATABASES = BAE_DB

然后在settings.py文件中,我将此中间件添加到MIDDLEWARE_CLASSES并设置DATABASES = {}。 结果我收到此错误消息:

You haven't set the database ENGINE setting yet.

实际上中间件可以正常工作,因为在Django错误页面的Settings部分我得到了:

DATABASES   
{'default': {'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'NAME': 'django', 'PASSWORD': '********************', 'PORT': '3306', 'USER': 'root'}}

我不知道为什么,我更改了DATABASES属性,但它没用。请帮帮我。

1 个答案:

答案 0 :(得分:0)

DATABASES == {}中有settings.py吗? - 如果是这样,请尝试将其设置为settings.py - 例如您目前在middware中显示的测试值。