ENGINE设置为postgresql_psycopg2时无法使用manage.py

时间:2019-11-22 11:02:30

标签: django postgresql

我有一个用django编写的应用程序,正在尝试运行。这是配置的摘录:

elif STAGE == 'TEST':
    DEBUG = False
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'username',
            'USER': 'dbname',
            'PASSWORD': 'passwd',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
else:
    DEBUG = True
    REGISTRATION_ENABLED = True
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, '../../location'
                if STAGE == 'STAGING'
                else 'db.sqlite3'),
        }
    }

当我将STAGE设置为TEST时,我根本无法使用manage.py,因为任何尝试运行它的原因(即使./manage.py都带有没有参数也会给我一个错误:

Traceback (most recent call last):
  File "/project_location/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "auth_group" does not exist
LINE 1: ...ELECT "auth_group"."id", "auth_group"."name" FROM "auth_grou...

现在,当我将STAGE设置为TEST以外的任何东西时,它都可以正常工作,但是不使用我希望它使用的postgres。已安装Postgres,创建了数据库,并可以使用用户名和密码登录到该数据库。 这里有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

好的,结果是应用程序中有错误。它被编程为捕获为sqlite抛出的OperationalError,但是没有捕获为postgresql抛出的ProgrammingError。如果有人感兴趣,那么有一个github问题可以更深入地描述问题: https://github.com/jazzband/django-sortedm2m/issues/31