【发布时间】:2011-07-06 05:58:42
【问题描述】:
我正在使用 Django (
我正在尝试向现有模型的类添加一个新字段。这个类已经有与之关联的数据。
manage.py syncdb 没有将新字段添加到数据库中。
有没有办法:
将新字段添加到已经存在的类中,并确保为其分配了 db 条目?
为所有已经存在的数据库条目用一个空字符串填充这个新字段?
【问题讨论】:
标签: django database database-migration
我正在使用 Django (
我正在尝试向现有模型的类添加一个新字段。这个类已经有与之关联的数据。
manage.py syncdb 没有将新字段添加到数据库中。
有没有办法:
将新字段添加到已经存在的类中,并确保为其分配了 db 条目?
为所有已经存在的数据库条目用一个空字符串填充这个新字段?
【问题讨论】:
标签: django database database-migration
此答案仍在广为人知,但已过时。从 1.7 开始,Django 附带了 built-in migration 系统,由与 South 相同的作者编写,并且已弃用 syncdb,尽管它仍然可以工作。
您只需运行一些命令即可自动添加新列:
python manage.py makemigrations
python manage.py migrate
了解幕后发生的事情会很有用,但这些是基础知识。如果您仍在阅读这篇旧文章,请提出新问题以获得有关 1.7 和迁移的答案。
syncdb 不会添加任何新列。看
http://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb
您必须手动添加它们。例如,。将<> 替换为相关信息:
python manage.py dbshell
ALTER TABLE <appname_modelname> ADD COLUMN <column_type> DEFAULT '';
您可以使用以下命令查看 Django 为在新的 syncdb 上生成列可能做了什么:
python manage.py sqlall app_name
并从那里复制和粘贴ALTER TABLE 语句。
否则,您可以查看第三方应用程序,例如 Django-South,它们是数据库迁移工具。
【讨论】:
sqlall 建议。
在您的 django 中安装 south,您可以轻松处理现有表。检查this
如果你真的想使用 Django-South,请在将新字段添加到现有模型运行后,将其安装在 django 上
python manage.py schemamigration --initial
它将在您的项目应用程序中创建一个文件。那么,
python manage.py 迁移
那就是你的桌子被改变了。
【讨论】:
还有其他迁移应用程序选项(尽管 South 是最常用的)。
我在我的项目中使用了django-evolution,它非常易于安装和开始使用。
South 似乎更完整,但对于更简单的任务,django-evolution 可能更适合。
【讨论】: