【问题标题】:how to restore dropped table with django-south?如何使用 django-south 恢复删除的表?
【发布时间】:2011-07-16 17:31:18
【问题描述】:

我想清除数据库中的一个表,所以我删除了该表。通常我会做manage.py syncdb 来重新创建它。但是,here 的答案表示不再使用syncdb。那么,我该怎么做呢?

【问题讨论】:

    标签: python database django django-south django-syncdb


    【解决方案1】:

    这是一个相当晚的回应,但对于会遇到同样问题的人(就像我一样)。

    通常要删除由 south 管理的应用程序的 db_tables,您应该使用:

    python manage.py migrate appname zero
    

    但是,如果您将它们手动放入数据库中,请让南知道它

    python manage.py migrate appname zero --fake
    

    当然还要重新创建表格

    python manage.py migrate appname
    

    【讨论】:

    • 我遇到了和@EliAlbert 一样的问题(只有一个模型掉线了)。我能够通过the steps in my answer below 恢复。
    • 只是为了澄清:这仅在您删除每个表时才有效every 表示每个表对应于指定应用的模型
    • 这很有帮助。
    【解决方案2】:

    有同样的问题。不确定这是否适用于所有情况,但这是我所做的:

    1. 在 INSTALLED_APPS 中注释掉“南”
    2. 运行 manage.py syncdb
    3. 在 INSTALLED_APPS 中取消注释“south”
    4. 运行 manage.py 迁移

    瞧!

    您的里程可能会有所不同......

    【讨论】:

    • 在执行此操作时,您还需要重命名迁移文件夹,我只是在前缀下划线。在上面的第 1 步和第 2 步之间执行此操作,然后在第 4 步之前重命名为“迁移”
    【解决方案3】:

    this exchange 涵盖了我的问题:

    如果您手动修改数据库,South 不会注意到 - 这是唯一的方法 跟踪数据库的版本是 south_migrationhistory 表,所以如果你在它背后摆弄它,它就是 你有责任修复它。

    我最终做的是注释掉我丢弃的模型,做一个schemamigration,创建一个我丢弃的空的无列表(所以南有一些东西要丢弃),migrateing ,然后再次取消注释模型,schemamigrationmigrateing。比只是丢表和syncdb 更烦人,但是啊。

    【讨论】:

    • mysql可以创建无列表的表吗?
    【解决方案4】:

    确保应用所有迁移: python manage.py migrate

    告诉 Django 创建模型中的表:python manage.py syncdb

    告诉南方一切都在它应该在的地方:python manage.py migrate appname --fake

    这假设自您创建上次迁移以来,您的任何模型都没有发生任何变化。

    【讨论】:

      【解决方案5】:

      我知道这个问题很老了,但我刚刚遇到了这个问题,并认为我会发布我的解决方案以防万一这对任何人都有帮助。

      1. 进入数据库所在的models.py 文件夹。
      2. models.py 文件中删除整个类。
      3. 运行 ./manage.py schemamigration appname --auto(这将创建另一个迁移,South 将识别删除此表)。您可能需要在数据库中重新创建一个空白表,以便 South 看到它。
      4. 运行migration,该表应该会从您的数据库中删除。
      5. 将表类重新粘贴到 models.py 文件中的位置。
      6. 运行 ./manage.py schemamigration appname --auto。南方应该拿起桌子并允许您迁移
      7. 运行 ./manage.py migrate appname 并且 South 应该将表重新添加回您的数据库中......再次使用列等,但显然没有数据。 :)

      【讨论】:

      • 哈哈很好,这正是我的回答所说的,但在逐步布局中。
      • 哦,太好了!对不起,我没有看到你回答。很高兴我们都达成了相同的决议,至少。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2023-04-06
      • 2013-05-15
      • 1970-01-01
      • 2019-09-12
      相关资源
      最近更新 更多