【问题标题】:django 1.7 how to migration with existed tablesdjango 1.7 如何使用现有表进行迁移
【发布时间】:2015-03-05 02:00:57
【问题描述】:

我升级到 django 1.7 并且需要处理迁移

我的数据库已经存在表

这是我的步骤:

1.我删除了django app中的migrationtest
2.我在 django settings.py 中删除了南(从 INSTALLED APPS 中)
3.运行python manage.py makemigrations test

  Migrations for 'test':
    0001_initial.py:
      - Create model Person
      - Create model Book
      - Create model Artical
  1. 运行python manage.py migrate test

    要执行的操作:
    应用所有迁移:test
    运行迁移:
    正在应用 test.0001_initial... FAKED

对吗???
如果我已经有表,如何进行迁移?
请指导我谢谢你

【问题讨论】:

  • 忘掉我的第一条评论吧。请阅读本文档:docs.djangoproject.com/en/1.7/howto/legacy-databases
  • 您需要在对模型进行更改之前将models.py恢复到其状态,然后如上所述makemigrationsmigrate...然后将更改应用于models.py并重复

标签: python django django-1.7


【解决方案1】:

如果您的数据库中存在的表与您当前的模型具有相同的结构是正确的(即,在您使用 South 应用最后一次迁移后,您没有修改您的 models.py 文件)。如果是这样,您可以放心地继续。

如果结构不同,您可以尝试不同的方法:

  • 手动创建所需的迁移。您必须编写自己的迁移并进行必要的修改。 Here 您可以找到一些用于更改或添加字段的迁移文件的示例代码,here 您拥有可以调用的方法的完整参考

  • 使用 phpmyadmin、原始 sql 或您喜欢的方法手动修改您的数据库。

  • 执行python manage.py dumpdata app1 app2 app3 > data.json,删除数据库,再次创建它并创建python manage.py loaddata data.json。这可能会引发一些错误,因为您保存的数据是旧结构,您必须处理每个错误。

  • 或者是最不喜欢的,如果不需要您拥有的数据,只需删除数据库并重新创建它。

【讨论】:

    【解决方案2】:

    你的做法没有错。

    第一次迁移被伪造的原因是因为您的表已经创建:

    运行 python manage.py migrate。 Django 会看到表 初始迁移已经存在并将它们标记为已应用 运行它们。

    来自documentation on upgrading from South

    【讨论】:

      猜你喜欢
      • 2014-11-13
      • 1970-01-01
      • 2014-12-13
      • 2015-10-30
      • 1970-01-01
      • 2014-11-13
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多