3

场景:我的 Django 应用程序中有一个应用程序,我从未将其置于 South 管理之下。我很久以前运行了一个syncdb,这个应用程序的模型从来没有改变过。一直以来,我显然已经向这些表中添加了数据。

现在,我希望把这个应用程序置于南方管理下,但是一旦表已经存在,我可以创建迁移文件,但自然不能执行它们。我收到现有表的数据库错误:

django.db.utils.DatabaseError: (1050, "Table 'ooyala_ooyalaitem' already exists")

这对我来说很明显。我想知道是否有一种聪明的方法可以运行 migrate 命令来使用当前表。我不想转储数据、手动删除表、运行迁移并重新填充内容,也不想为此创建数据迁移。

对此有什么想法吗?甚至可能吗?

谢谢你的时间。

4

1 回答 1

12

这在手册中有介绍

将应用程序转换为使用 South 非常简单:

  • 编辑您的 settings.py 并将“南”放入INSTALLED_APPS(假设您已将其安装到正确的位置)
  • 运行./manage.py syncdb以将 South 表加载到数据库中。请注意,syncdb 现在看起来不同了 - South 对其进行了修改。
  • Run ./manage.py convert_to_south myapp- South 将自动进行并假装应用您的第一次迁移。

请注意,您需要在进行任何更改之前进行转换;South 通过与上次迁移的冻结状态进行比较来检测更改,因此它无法检测到您转换为使用 South 之前的更改。

于 2012-12-07T13:25:36.947 回答