Django迁移关系不存在

时间:2016-11-11 13:52:34

标签: python django postgresql

所以我试图在django应用程序上运行初始迁移,当我尝试运行migrate命令(python manage.py migrate或makemigrations)时,我收到以下错误:

psycopg2.ProgrammingError: relation "dotworks_server_internship" does not exist
LINE 1: ...s", "dotworks_server_internship"."questions" FROM "dotworks_...
                                                             ^

我在使用Django 1.9.6的Windows环境中,我的数据库是postgres。另外,我正在使用PGAdmin来管理我的数据库。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'dotworks',
        'USER': 'postgres',
        'PASSWORD': 'mypasswordgoeshere',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

9 个答案:

答案 0 :(得分:3)

我遇到了这个问题,我不得不在urls.py中注释掉所有引用views.py的内容,然后运行makemigrations。希望这会有所帮助。

答案 1 :(得分:2)

如果提到的所有其他解决方案都失败,如果您仍在开发中,最简单的解决方案可能是放弃数据库(在pgAdmin 4 2.0中,右键单击数据库),然后运行makemigrationsmigrate

答案 2 :(得分:1)

如果你在当地跑步, 对于每个Django应用程序(可能只有一个),擦除migrations文件夹的内容。 然后,运行python manage.py makemigrations app1 app2 app3(如果您有3个名为app1,app2,app3的Django应用程序)。这将(重新)创建迁移数据库所需的迁移文件

然后,运行python manage.py migrate。它将应用您刚刚创建的迁移文件。

答案 3 :(得分:1)

尝试使用以下过程迁移特定应用。请参阅Django migrations

python manage.py makemigrations

创建初始迁移,然后使用应用名称

运行migrate命令
python manage.py migrate appname1, appname2

答案 4 :(得分:1)

您的应用正在尝试调用一些不存在的数据库条目。 如果您尝试将其迁移到新数据库,您的选择之一是导出旧数据库的转储并将其导入新数据库

例如在 PostgreSQL 中,使用以下命令导入数据库,然后迁移将起作用!

sudo -u postgres -i psql mydb < mydb-export.sql

答案 5 :(得分:0)

请确保您的代码中没有任何调用Django管理器的类变量

例如:

class SomeViewSet(viewsets.ViewSet):
    se = SomeEntity.objects.first()  # fetching some entity on the class level

    def list(self, request):
    # the rest of the code

因此,当您尝试创建/应用迁移时,此变量还将尝试初始化,并尝试访问SomeEntity,但在那个时候该实体甚至不存在,并且会发生错误。

答案 6 :(得分:0)

此错误可能与先前的数据库错误有关。因此,如果您创建了新数据库并且还遇到该类型的错误,则只需使用应用名称运行该命令即可:

1)python manage.py makemigrations <“ app name”>
2)python manage.py migration <“ app name”>

答案 7 :(得分:0)

我已通过此解决方案解决了该错误。

首先删除urls.py中的所有url。

创建简单的功能视图以不显示任何内容。

def simple(request):
    context = {}
    return render(request, 'base.html', context)

并将网址添加到urs.py

进行迁移

python manage.py migrate

迁移后, 恢复已删除的urls.py内容

:)

答案 8 :(得分:0)

对我来说,错误来自我放入 app.ready() 方法的一些初始化代码。注释那部分代码使我可以毫无问题地运行命令 makemigrations。

我相信即使是 makemigrations 命令,manage.py 也会在某个时候调用 app.ready,这导致我的代码在任何迁移之前查询我的数据库。

多亏了回溯,我发现了有问题的代码。