gpt4 book ai didi

django - 重置南部的迁移会导致 'table already exists'

转载 作者:行者123 更新时间:2023-12-02 09:03:23 28 4
gpt4 key购买 nike

好吧,这让我抓狂。我正在尝试删除并重置两个应用程序的开发环境中的所有南方迁移,并从头开始,因为我的迁移文件列表变得很长,而且我不需要它们,因为模型不断变化改变,这只是DEV。无论我尝试什么,South 都会不断提示数据库表已经在那里。

继续 this回答所以,我首先从每个应用程序中完全删除我的迁移目录:

rm -r <my-app>/migrations

没问题。然后重置南表:

python manage.py reset south

再次强调,不用担心。

现在告诉南我希望管理这些应用程序:

python manage.py convert_to_south <appname>

一切看起来都很好,它甚至创建了初始迁移并运行 --fake:

Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate CC
- Soft matched migration 0001 to 0001_initial.
Running migrations for CC:
- Migrating forwards to 0001_initial.
> CC:0001_initial
(faked)

好的,根据我(不正确的)理解,我现在的现有表由南管理。 South 知道表已经存在,因为我们最初运行为 --fake。

现在,我向模型添加一个新字段,运行 schemamigration,然后迁移到该新架构,猜猜看,South 提示这些表已经存在。

django.db.utils.DatabaseError: table "_south_new_CC_coveredcall" already exists

什么鬼?我到底做错了什么?

最佳答案

警告:现在已经很晚了,我很累,但它会是这样的:

您不必告诉 South 您想要迁移现有应用程序(这意味着存在架构),您可以对应用程序进行假置零、删除迁移并为每个应用程序创建一个新的初始应用程序并假装应用它。这基本上让 South 将多个迁移替换为每个应用一个迁移

$ ./manage.py dumpdata myapp1 myapp2 > dumped.json  # just in case!
$ ./manage.py migrate myapp1 zero --fake
$ ./manage.py migrate myapp2 zero --fake
$ rm /path/to/myapp1/migrations/.py*
$ rm /path/to/myapp2/migrations/.py*
$ ./manage.py schemamigration myapp1 --initial
$ ./manage.py schemamigration myapp2 --initial
$ ./manage.py migrate myapp1 --fake
$ ./manage.py migrate myapp2 --fake

myapp1 和 myapp2 的新 0001 迁移将与实际创建现有架构的多个迁移具有相同的结果,因此所有迁移都很好(只要没有自定义 SQL 迁移等)

关于django - 重置南部的迁移会导致 'table already exists',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141824/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com