无法覆盖默认的django数据库设置

时间:2017-01-26 20:52:50

标签: python django psycopg2

我在settings.py中设置了Django DATABASES的问题。 我正在使用Python 3.4.3,Django 1.10.5和psycopg 2.6.1

如果我的代码看起来像

        DATABASES = { 
            'default':{
                  'ENGINE': 'django.db.backends.postgresql_psycopg2', 
                        'NAME': ' dbname',
                        'USER': 'postgres',
                        'PASSWORD': 'dbpass',
                        'HOST': 'localhost',
                        'PORT': '5432',
    }
}

我在DATABASE部分运行manage.py diffsettings有一些默认设置:

DATABASES = {'default': {'USER': '', 'HOST': '', 'AUTOCOMMIT': True, 'NAME': '', 'ATOMIC_REQUESTS': False, 'OPTIONS': {}, 'TEST': {'MIRROR': None, 'CHARSET': None, 'NAME': None, 'COLLATION': None}, 'ENGINE': 'django.db.backends.dummy', 'PASSWORD': '', 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'PORT': ''}}

但是当我将'default'更改为'db'(或任何其他名称)时

       DATABASES = { 
            'db':{
                  'ENGINE': 'django.db.backends.postgresql_psycopg2', 
                        'NAME': ' dbname',
                        'USER': 'postgres',
                        'PASSWORD': 'dbpass',
                        'HOST': 'localhost',
                        'PORT': '5432',
    }
}

manage.py diffsettings'知道'数据库db:

DATABASES = {'db': {'NAME': 'dbname', 'HOST': 'localhost', 'PORT': '5432', 'PASSWORD': 'dbpass', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres'}, 'default': {'OPTIONS': {}, 'ATOMIC_REQUESTS': False, 'HOST': '', 'AUTOCOMMIT': True, 'PASSWORD': '', 'USER': '', 'TIME_ZONE': None, 'NAME': '', 'PORT': '', 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.dummy', 'TEST': {'NAME': None, 'MIRROR': None, 'COLLATION': None, 'CHARSET': None}}}

我应该如何使用我的数据库作为默认值而不必使用DATABASE_ROUTERS?

1 个答案:

答案 0 :(得分:2)

根据您在上述问题中的评论,我假设您正在尝试在Heroku实例中设置Django。

如果您正在使用Heroku的入门模板,那么您将看到对DATABASES变量的覆盖。这是因为Heroku使用库 dj_database_url 来获取使用Heroku应用程序部署的数据库的环境路径。因此Django更新默认数据库以使用它。当您想将Django应用程序部署到Heroku实例时,这是相关的。

如果您想在本地环境(您的机器)中使用您的应用,您只需要评论这两行:

# db_from_env = dj_database_url.config(conn_max_age=500)
# DATABASES['default'].update(db_from_env)

但请记住在将代码上传到Heroku时再次注释掉这些行。