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

标签 python django psycopg2

我在 settings.py 中的 Django 数据库设置有问题。 我正在使用 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',
    }
}

我在数据库部分运行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“知道”数据库:

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 ?

最佳答案

根据您在上述问题中的评论,我假设您正在尝试在 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 时再次注释掉这些行。

关于python - 无法覆盖默认的 django 数据库设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41882798/

相关文章:

python - 如何在没有大括号或附加符号的情况下将值插入 tkinter 条目?

python - 使用 Python Pandas 按顺序对值进行排序

python - Pygal 图表中的居中对齐标题

django - django 1.9 中 is_popup 变量出现错误

python - 使用 psycopg3 在服务器之间复制表

python - Psycopg2 数据库连接在丢失的网络连接上挂起

python - Seaborn 条形图中的垂直线代表什么?

django - 为什么 CeleryCAM 不能与 Amazon SQS 一起使用?

python - 重命名模板中对 Django 消息的引用?

postgresql - psycopg2无法连接到dockerized Python-Flask应用程序中的postgres数据库