Django-Mysql数据迁移

时间:2012-05-15 19:59:39

标签: mysql django migration

我想知道这样做的最简单方法:

我有一个名为Student的模型,以及许多具有许多属性的数据库中的学生,如:

名称类型

id int(11)

name varchar(200)

sex varchar(1)

status int(11)

创建日期时间

我想要做的是将模型重命名为Costumer,并将“status”字段设为Charfield(varchar)而不是整数。我必须保持数据库中的数据不变。

3 个答案:

答案 0 :(得分:2)

SOUTH的世界敞开心扉。 South是Django项目的智能模式和数据迁移。

安装并在你的django settings installed_apps列表中放入'south'后,你想运行2个命令。

  1. python manage.py schemamigration [my_app_name] - 首次运行时使用初始#initial
  2. 在步骤1之后,您的app文件夹中会有一个名为“migrations”的文件夹,现在您必须通过执行python manage.py migrate [my_app_name]
  3. 来应用迁移。

    应用迁移后,您可以通过运行python manage.py migrate [my_app_name] --list来检查迁移的状态。已应用带*的迁移。

答案 1 :(得分:0)

  

创建表costumer(id int(11),

     

name varchar(200),

     

sex varchar(1),

     

status varchar(20)   创建日期时间);

     

插入到costumer中选择id,name,sex,cast(status as char),从中创建   学生;

然后编辑你的django以匹配。

答案 2 :(得分:0)

如果没有其他模型引用学生,那么你可以这样做:

  1. 首先备份数据库,确保可以从中恢复(进入另一个不同的数据库)

  2. 更新django模型的python代码

  3. 让django创建新表(对于重命名的模型):

    python manage.py syncdb
    
  4. 将数据从旧表复制到新表:

    echo 'insert into costumer select id, name, sex, cast(status as char), created from student;' | python manage.py dbshell
    
  5. 但是,如果您有其他模型引用旧表,使用外键或manytomany关系,则上述操作将无效,因为其他模型可能在其数据库模式中引用旧表。如果那是你的情况那么你可以试试这个:

    1. 将所有模型转储到json

      python manage.py dumpdata --indent 4 > everything.json
      
    2. 更新您的django模型

    3. 让Django创建新表(对于重命名的模型):

      python manage.py syncdb
      
    4. 手动编辑json文件,将模式"model": "yourapp.student"替换为"model": "yourapp.costumer"。您可能需要进行其他替换,具体取决于您的模型及其之间的关系。

    5. 重新加载json

      python manage.py loaddata
      
    6. 对于未来,请查看@mangobug的答案并开始使用django-south