【问题标题】:Django programming error relation does not exist despite model being created尽管创建了模型,但 Django 编程错误关系不存在
【发布时间】:2020-11-23 07:16:44
【问题描述】:

我重命名了一些模型并尝试应用迁移,但 Django 没有检测到它们已重命名。因此,我删除了 manage.py 的内容,刷新了数据库,然后运行了 manage.py makemigrations 和 manage.py migrate。现在,当我尝试通过管理控制台或任何查询访问我的模型之一时,我收到以下错误:

ProgrammingError at /admin/restapi/appuser/
relation "restapi_appuser" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "restapi_appuser"

当我运行 manage.py makemigrations 时,输出包括(截断):

Migrations for 'restapi':
  restapi/migrations/0001_initial.py
    - Create model AppUser

我尝试使用以下输出(截断)运行 python3 manage.py sqlmigrate restapi 0001_initial:

BEGIN;
--
-- Create model AppUser
--
CREATE TABLE "restapi_appuser" ("id" serial NOT NULL PRIMARY KEY, "username" varchar(30) NOT NULL UNIQUE, "email" varchar(50) NOT NULL UNIQUE, "password" varchar(50) NOT NULL, "join_date" timestamp with time zone NOT NULL);

在我看来,模型应该在数据库中,但我想知道为什么会出现此错误

编辑:

这里是 manage.py migrate 的完整输出:

> python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, restapi, sessions
Running migrations:
  No migrations to apply.

【问题讨论】:

  • 刷新数据库时是否删除了所有表,包括迁移表?
  • 我运行了“manage.py flush”——这会删除所有表吗?
  • 它没有,您可能应该删除并重新创建数据库以获取新的数据库
  • 您可以尝试python manage.py migrate restapi zero 撤消第一次迁移,然后重试python manage.py migrate。如果由于表实际上不存在而导致零迁移失败,请尝试使用--fake。
  • 删除数据库并重新创建它,然后重新运行 makemigrations 和 migrate 修复了该问题。谢谢你的帮助!!

标签: python django


【解决方案1】:

sqlmigrate 仅向您显示迁移的 SQL。

在makemigrationsed 之后,您需要运行 migrate 以便 Django 将待处理的迁移实际应用到您的数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2014-12-23
    • 2013-07-08
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多