【问题标题】:Django - Adding a second database entry causes failure. Django no longer uses 'default'Django - 添加第二个数据库条目会导致失败。 Django 不再使用“默认”
【发布时间】:2019-09-07 21:53:57
【问题描述】:

我的数据库和项目使用此数据库设置运行良好:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'myprojectdb',
        'USER': 'myprojectuser',
        'PASSWORD': 'my_secret_password',
        'HOST': 'localhost',
        'PORT': '5432',
        'ATOMIC_REQUESTS': True
    },
}

但我想像这样为我的只读数据库用户添加一个“只读”数据库条目,以便我可以运行 django-sql-explorer:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'myprojectdb',
        'USER': 'myprojectuser',
        'PASSWORD': 'my_secret_password',
        'HOST': 'localhost',
        'PORT': '5432',
        'ATOMIC_REQUESTS': True
    },
    'readonly': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'myprojectdb',
        'USER': 'myprojectreadonly',
        'PASSWORD': 'your_eyes_only_secret',
        'HOST': 'localhost',
        'PORT': '5432',
        'ATOMIC_REQUESTS': True
    }
}

现在 django 抛出了几个不同的错误。如果我尝试对迁移做任何事情,我会得到:

django.db.utils.ProgrammingError: permission denied for relation django_migrations

如果我尝试运行服务器,我会得到:

"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'users.User' that has not been installed

似乎当我添加第二个数据库设置时,django 正在尝试将其用于迁移、运行服务器等,即使它不是“默认”

如果我注释掉第二个条目,一切都会恢复正常。

关于如何纠正此问题的任何建议?


编辑:如果我将设置更改为使用相同的用户名和密码,一切都会很好,所以这不仅仅是 django 对名称感到困惑的问题。即:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'myprojectdb',
        'USER': 'myprojectuser',
        'PASSWORD': 'my_secret_password',
        'HOST': 'localhost',
        'PORT': '5432',
        'ATOMIC_REQUESTS': True
    },
    'readonly': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'myprojectdb',
        'USER': 'myprojectuser',
        'PASSWORD': 'my_secret_password',
        'HOST': 'localhost',
        'PORT': '5432',
        'ATOMIC_REQUESTS': True
    }
}

【问题讨论】:

    标签: django database postgresql migration


    【解决方案1】:

    两个配置共享相同的数据库名称'NAME': 'myprojectdb' 因此,当您尝试迁移 dbname 时,似乎会发生冲突,因此应用程序犹豫不决,使用前一个还是后一个

    【讨论】:

    • 但除非我明确告诉 django 使用特定连接,否则它不应该默认为“默认”吗?还是我误解了这是如何工作的?另外,NAME 是数据库名称(docs.djangoproject.com/en/2.2/ref/settings/#name),所以如果两个 db 用户使用同一个数据库,这个值必须保持不变,对吧?
    • 事实上,文档说“默认路由方案确保如果未指定数据库,所有查询都回退到默认数据库。” (docs.djangoproject.com/en/2.1/topics/db/multi-db/…),但在这种情况下似乎无法正常工作。
    猜你喜欢
    • 2018-03-12
    • 2016-07-21
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多