我想知道最简单的方法:
我有一个名为 Student 的模型,数据库中有许多 Student 具有许多属性,例如:
名称类型
id int(11)
名称 varchar(200)
性别 varchar(1)
状态 int(11)
创建日期时间
我想要做的是将模型重命名为 Costumer 并使“状态”字段成为 Charfield (varchar) 而不是整数。而且我必须保持数据库中的数据完好无损。
向南的世界敞开你的自我。South 是 Django 项目的智能模式和数据迁移。
安装后,将“south”放入 django 设置 installed_apps 列表中,您希望运行 2 个命令。
应用迁移后,您可以通过运行 python manage.py migrate [my_app_name] --list 检查迁移状态。已应用带有 * 的迁移。
创建表客户(id int(11),
名称 varchar(200),
性别 varchar(1),
status varchar(20) created datetime );
插入到客户中选择 id、name、sex、cast(status as char),由学生创建;
然后当然编辑你的 django 以匹配。
如果没有其他模型引用学生,那么您可以这样做:
首先备份您的数据库,确保您可以从中恢复(到另一个不同的数据库)
更新 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
但是,如果您有其他模型使用外键或多对多关系引用旧表,那么上述方法将不起作用,因为这些其他模型可能在其数据库模式中引用了旧表。如果这是你的情况,那么你可以试试这个:
将所有模型转储到 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
.