【问题标题】:How can i get my south migrations to work?我怎样才能让我的南方移民工作?
【发布时间】:2013-04-15 05:04:05
【问题描述】:

我在南方与我的 django 项目合作时遇到了麻烦,我遵循了关于将应用程序转换为南方的南方文档,也查看了这里 (Why don't my south migrations work?),但都是徒劳的。

将南添加到INSTALLED_APPS 并运行syncdb,

Synced:
 > django.contrib.messages
 > django.contrib.staticfiles
 > smartmin
 > nsms.console
 > django_extensions
 > pagination
 > restaurant_detail
 > live
 > debug_toolbar
 > orders
 > django.contrib.admindocs

Not synced (use migrations):
 - django.contrib.auth
 - django.contrib.contenttypes
 - django.contrib.sessions
 - django.contrib.sites
 - guardian
 - south
 - django_quickblocks
 - rapidsms
 - rapidsms_httprouter
 - sorl.thumbnail
 - djangoratings
 - agon_ratings
 - django.contrib.admin
(use ./manage.py migrate to migrate these)

此时我执行这个命令,python manage.py migrate,这给出了错误django.db.utils.DatabaseError: relation "south_migrationhistory" does not exist LINE 1: ...gration", "south_migrationhistory"."applied" FROM "south_mig... 我在这里做错了什么?

【问题讨论】:

  • 你试过syncdb --migrate
  • @Charl 它返回相同的错误
  • 在您安装的应用程序中是南吗?
  • 是的,它是@krak3n,如果不是,我会得到一个不同的错误..

标签: django migration django-south


【解决方案1】:

如果这是您的第一次迁移,或者您只想重新开始:

  1. 删除并创建您当前的数据库
  2. 删除您的迁移目录:rm -Rf your_app/migrations/
  3. 只需一个命令即可同步和迁移:python manage.py syncdb --migrate

下一次迁移需要:

  1. python manage.py schemamigration your_app --auto
  2. python manage.py migrate your_app

这对我有用:)

【讨论】:

  • 注意:您可能需要删除其他目录中的迁移文件夹,例如site-packages/django/contrib/auth/migrations
【解决方案2】:

这一切都是因为我的site_packages 中的南已经有一个迁移目录,我不知道它在那里。当我摆脱该目录时,一切正常。 向那些辛勤工作以解决由于我的心不在焉引起的问题的 stackoverflow 人员表示歉意。

【讨论】:

  • 那是救命稻草,当您执行 pip uninstall south 时,该文件夹甚至不会被删除 :)
【解决方案3】:

这个问题可以通过遵循善意的建议来解决:如果您在调试尝试中的任何时候尝试过python manage.py schemamigration south --initial,您将在 South 应用程序本身的站点包中创建一个“迁移”文件夹。不幸的是,migrations 文件夹的存在是 South 在执行更改后的 syncdb 进程时确定它是否应该跳过应用程序的方式。包括如果那个应用程序......是南方。

当您删除数据库以尝试从头开始调试时,South 修改后的 syncdb 将跳过创建 south_migrationhistory 表,假设迁移文件夹会更好地了解,并且迁移表需要 south_migrationhistory 表才能工作。

解决问题:

  1. 进入您的站点包并删除南应用程序中的migrations/ 文件夹。
  2. 最后一次运行python ./manage.py syncdb

通过 pip 卸载/重新安装 South 并不会真正删除它,因为它不会影响有问题的文件夹。

另外,Marius Grigaitis 提出了针对同一错误的解决方法,尽管当时它被归咎于南方错误。

【讨论】:

    【解决方案4】:

    您必须先迁移 south 本身以创建 south 表,然后才能迁移其他应用程序:

    # python manage.py migrate south
    # python manage.py migrate
    

    【讨论】:

      【解决方案5】:

      似乎没有在您的数据库中创建迁移表。这有点奇怪,也许这会起作用:

      python manage.py schemamigration south --initial
      python manage.py migrate south
      

      然后继续其他迁移。

      【讨论】:

      • 如果您没有南桌,您想将南桌添加到您不存在的南桌吗?
      • @Liarez 非常感谢您的反馈,但正如您所见,这个问题的答案有点奇怪,而且已经快一年了。当我回答这个问题时,我只是有一种预感(如您所见,还有其他人)。你指望我如何提醒我那一刻的想法?无论如何,请随意投反对票:)
      • 我刚刚遇到了这个问题,我看到很多人重复你的回答,如果南不工作试图迁移到自己,这没有任何意义,这就是为什么不赞成,因为答案根本没有帮助
      • @Liarez 很公平。很高兴知道您找到了问题的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多