我创建了一个示例 Django 应用程序,其中包含多个模型并填充了数据。
现在,我需要向其中一个模型添加一个新列吗?
这是我的担忧吗?
- 如果我在向模型添加列后执行 syncdb 会发生什么,它会改变表并添加新列吗?
- 还是会在删除所有列后创建一个新表?
有没有更好的方法来解决这个问题?
我创建了一个示例 Django 应用程序,其中包含多个模型并填充了数据。
现在,我需要向其中一个模型添加一个新列吗?
这是我的担忧吗?
有没有更好的方法来解决这个问题?
syncdb 不会添加新列,如果表已经存在,则不会创建新表。我以前做的事情就是在模型中添加字段名称之后。进入外壳并输入:
$ python manage.py dbshell
you will get directly within your database shell (mysql or psql) it up to what database
you are using.
mysql> | psql> ALTER TABLE <table_name> ADD column varchar(100);
and it will add the new column to your table, doesn't matter if the table it already populated or not.
syncdb
不适用于更改数据库表。这是文档(阅读:Syncdb不会更改现有表)
实现此目的的一种干净方法是使用 3rd 方工具,例如django south,它将为您处理迁移(在您的情况下处理更改表脚本)。
在开发中,我经常使用重置功能。这对我很有用,因为我不介意泄露开发数据。它基本上只为那个应用程序创建新的数据库表——所以它会删除你的数据。如果您希望保持数据填充,则没有用,如上所述,南方更好。
python manage.py reset <app-name>