0

我想知道最简单的方法:

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

名称类型

id int(11)

名称 varchar(200)

性别 varchar(1)

状态 int(11)

创建日期时间

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

4

3 回答 3

2

向南的世界敞开你的自我。South 是 Django 项目的智能模式和数据迁移。

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

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

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

于 2012-05-15T20:04:36.603 回答
0

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

名称 varchar(200),

性别 varchar(1),

status varchar(20) created datetime );

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

然后当然编辑你的 django 以匹配。

于 2012-05-15T20:08:50.723 回答
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
    

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

  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-05-15T21:48:10.940 回答