【问题标题】:Django-Mysql Data MigrationDjango-Mysql 数据迁移
【发布时间】:2012-05-15 19:59:39
【问题描述】:

我想知道最简单的方法:

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

名称类型

id int(11)

名称 varchar(200)

sex varchar(1)

状态 int(11)

创建日期时间

我想要做的是将模型重命名为 Costumer 并使“状态”字段成为 Charfield (varchar) 而不是整数。而且我必须保持数据库中的数据完好无损。

【问题讨论】:

    标签: mysql django migration


    【解决方案1】:

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

    在安装后将“south”放入您的 django 设置 installed_apps 列表中,您希望运行 2 个命令。

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

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

    【讨论】:

      【解决方案2】:

      创建表客户(id int(11),

      名称 varchar(200),

      性 varchar(1),

      状态 varchar(20) 创建日期时间);

      插入到客户选择 id,name,sex,cast(status as char), 创建自 学生;

      然后当然要编辑您的 django 以匹配。

      【讨论】:

        【解决方案3】:

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

        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
          

        但是,如果您有其他模型使用外键或多对多关系引用旧表,则上述方法将不起作用,因为这些其他模型可能在其数据库模式中引用了旧表。如果这是你的情况,那么你可以试试这个:

        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
          

        对于未来,请查看@mangobug 的答案并开始使用django-south

        【讨论】:

          猜你喜欢
          • 2012-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 2018-03-04
          • 1970-01-01
          相关资源
          最近更新 更多