【问题标题】:Django migrate --fake-initial reports relation already existDjango migrate --fake-initial 报告关系已经存在
【发布时间】:2019-07-27 04:15:48
【问题描述】:

我正在尝试将现有数据库导入到我的 Django 项目中,因此我运行 python manage.py migrate --fake-initial,但出现此错误:

operations to perform:
  Apply all migrations: ExcursionsManagerApp, GeneralApp, InvoicesManagerApp, OperationsManagerApp, PaymentsManagerApp, RatesMan
agerApp, ReportsManagerApp, ReservationsManagerApp, UsersManagerApp, admin, auth, authtoken, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... FAKED
  Applying auth.0001_initial... FAKED
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying GeneralApp.0001_initial...Traceback (most recent call last):
  File "/Users/hugovillalobos/Documents/Code/IntellibookWebProject/IntellibookWebVenv/lib/python3.6/site-packages/django/db/back
ends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)

psycopg2.ProgrammingError: relation "GeneralApp_airport" already exists

当然所有的表都已经存在于数据库中,这就是我使用--fake-initial的原因,那是为了伪造数据库对象的创建。

为什么migrate 试图创建表GeneralApp__airport 而不是伪造它?

【问题讨论】:

    标签: python django django-migrations


    【解决方案1】:

    --fake-initial 无法处理初始迁移中列出的某些表存在而某些不存在的任何情况。因此,如果您的0001_initial.py 中的operations 列表中的CreateModel()s 中的某些(但不是全部)存在表,则--fake-initial 不适用,它会尝试为所有模型创建表。

    这有意义吗?不是我...

    【讨论】:

      【解决方案2】:

      您可以遵循的步骤从现有数据库进行迁移。首先从数据库中清空django迁移表。

      delete from django_migrations
      
      1. 从应用的迁移文件夹中删除迁移
      rm -rf <app>/migrations/
      
      1. 重置内置应用程序的迁移(如管理员)
      python manage.py migrate --fake
      
      1. 为每个应用创建初始迁移
      python manage.py makemigrations <app>
      
      1. 最后一步是创建虚假的初始迁移
      python manage.py migrate --fake-initial
      

      【讨论】:

        【解决方案3】:

        只需运行以下command 即可解决问题:

        python manage.py migrate --fake
        

        【讨论】:

          猜你喜欢
          • 2018-03-28
          • 2017-07-30
          • 2018-06-29
          • 2018-04-07
          • 2015-09-01
          • 2021-06-01
          • 2020-06-20
          • 2015-07-02
          • 2015-04-28
          相关资源
          最近更新 更多