所以我试图在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',
}
}
答案 0 :(得分:3)
我遇到了这个问题,我不得不在urls.py中注释掉所有引用views.py的内容,然后运行makemigrations。希望这会有所帮助。
答案 1 :(得分:2)
如果提到的所有其他解决方案都失败,如果您仍在开发中,最简单的解决方案可能是放弃数据库(在pgAdmin 4 2.0中,右键单击数据库),然后运行makemigrations
和migrate
答案 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,这导致我的代码在任何迁移之前查询我的数据库。
多亏了回溯,我发现了有问题的代码。