我想知道这样做的最简单方法:
我有一个名为Student的模型,以及许多具有许多属性的数据库中的学生,如:
名称类型
id int(11)
name varchar(200)
sex varchar(1)
status int(11)
创建日期时间
我想要做的是将模型重命名为Costumer,并将“status”字段设为Charfield(varchar)而不是整数。我必须保持数据库中的数据不变。
答案 0 :(得分:2)
向SOUTH的世界敞开心扉。 South是Django项目的智能模式和数据迁移。
安装并在你的django settings installed_apps列表中放入'south'后,你想运行2个命令。
应用迁移后,您可以通过运行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)
如果没有其他模型引用学生,那么你可以这样做:
首先备份数据库,确保可以从中恢复(进入另一个不同的数据库)
更新django模型的python代码
让django创建新表(对于重命名的模型):
python manage.py syncdb
将数据从旧表复制到新表:
echo 'insert into costumer select id, name, sex, cast(status as char), created from student;' | python manage.py dbshell
但是,如果您有其他模型引用旧表,使用外键或manytomany关系,则上述操作将无效,因为其他模型可能在其数据库模式中引用旧表。如果那是你的情况那么你可以试试这个:
将所有模型转储到json
python manage.py dumpdata --indent 4 > everything.json
更新您的django模型
让Django创建新表(对于重命名的模型):
python manage.py syncdb
手动编辑json文件,将模式"model": "yourapp.student"
替换为"model": "yourapp.costumer"
。您可能需要进行其他替换,具体取决于您的模型及其之间的关系。
重新加载json
python manage.py loaddata
对于未来,请查看@mangobug的答案并开始使用django-south
。