将字段添加到Django的现有数据库(版本<1.7)

Ram*_*i_H 10 database django database-migration

我正在使用Django(<v1.7),SQLite3作为数据库引擎.

我正在尝试向现有模型的类中添加一个新字段.该类已经有与之关联的数据.

manage.py syncdb 没有将新字段添加到数据库.

有没有办法:

  1. 将新Field添加到现有类中,并确保为其分配了db条目?

  2. 对于所有已存在的数据库条目,使用空字符串填充此新字段?

Yuj*_*ita 18

这个答案仍然可见,但已经过时了.由于1.7 Django附带了内置的迁移系统,由同一作者编写South,并且已经弃用,syncdb但它仍然有效.

您只需运行一些命令即可自动添加新列:

python manage.py makemigrations  
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

了解幕后发生的事情会很有用,但这些都是基础知识.如果您还在阅读这篇旧帖子,请提出新问题以获得1.7和迁移的答案.


对于django <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 '';
Run Code Online (Sandbox Code Playgroud)

您可以看到Django可能syncdb通过使用以下方式生成新的列:

python manage.py sqlall app_name
Run Code Online (Sandbox Code Playgroud)

ALTER TABLE从那里复制和粘贴声明.

否则,您可以查看Django-South等第三方应用程序,它们是数据库迁移工具.


shi*_*ivg 10

在django中向南安装,您可以轻松处理现有表格.检查一下

如果您真的想使用Django-South,请在将新字段添加到现有模型运行后将其安装在django上

python manage.py schemamigration --initial

它将在您的项目应用程序中创建一个文件.然后,

python manage.py migrate

多数民众赞成你的桌子被改变了.