一尘不染

建议使用Django South重置迁移历史记录的方法是什么?

django

我已经积累了许多使用South(0.7)和Django(1.1.2)进行的迁移,这些迁移在我的单元测试中开始占用大量时间。我想重置基准并开始新的迁移。我已经阅读了South文档,进行了常规的Google / Stackoverflow搜索(例如“ django south(重置或删除或删除)迁移历史记录”),但没有发现任何明显的内容。

我考虑过的一种方法是通过手动“删除” South或“清除”历史记录来“重新开始”(例如,清除db表,从Migrations Director中删除迁移文件),然后重新运行,

./manage.py schemamigration southtut --initial

因此,如果有人以前做过并且有一些提示/建议,将不胜感激。


阅读 346

收藏
2020-03-26

共2个答案

一尘不染

只要你注意同时在所有部署上执行此操作,就不会有任何问题。就个人而言,我会:

    rm -r appname/migrations/ 
    ./manage.py reset south 
    ./manage.py convert_to_south appname 

(请注意,“ reset south”部分会清除所有应用程序的迁移记录,因此请确保你为所有应用程序运行另外两行或有选择地删除)。

最后的convert_to_south调用进行了新的迁移并对其进行了虚假应用(因为你的数据库已经具有相应的表)。在此过程中,无需删除所有应用程序表。

当我需要摆脱所有这些不需要的开发迁移时,这就是我在开发+生产服务器上正在做的事情:

  1. 确保双方都有相同的数据库架构
  2. 删除两侧的每个迁移文件夹
  3. 运行./manage.py在两侧重置南(如帖子所述)=清除南表*
  4. 在两侧运行./manage.py convert_to_south(伪造0001迁移)
  5. 然后我可以重新开始进行迁移并在服务器上推送迁移文件夹

*除非你只想清理一个应用程序,否则,你将需要编辑south_history表并仅删除有关该应用程序的条目。

2020-03-26
一尘不染

如果你需要选择性地(仅针对一个应用)重置重置时间太长的迁移,这对我来说很有效。

rm <app-dir>/migrations/*
python manage.py schemamigration <app-name> --initial
python manage.py migrate <app-name> 0001 --fake  --delete-ghost-migrations

别忘了通过添加类似于你的文件的行来手动还原对其他应用程序的任何依赖关系,作为迁移类中的第一个属性,位于下方。depends_on = (("<other_app_name>", "0001_initial"),("<yet_another_app_name>", "0001_initial"))<app-dir>/migrations/0001_initial.pyclass Migration(SchemaMigration):

然后./manage.py migrate <app-name> --fake --delete-ghost-migrations,你可以根据此SO答案在其他环境中。当然,如果你假的删除或假的migrate zero,你需要手动删除任何遗留的数据库表中包含迁移这样。

另一个核心选​​择是./manage.py migrate --fake --delete-ghost-migrations在实时部署服务器上,然后是[my] sqldump。然后,在需要迁移的,完全填充的数据库的环境中,将转储通过管道传输到[my] sql。我知道南祭祀,但为我工作。

2020-03-26