12

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

我正在尝试向已经存在的模型类添加一个新字段。这个类已经有与之关联的数据。

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

有没有办法:

  1. 将新字段添加到已经存在的类中,并确保为它分配了一个 db 条目?

  2. 为所有已经存在的数据库条目填充一个空字符串这个新字段?

4

3 回答 3

22

这个答案仍然可见,但已经过时了。从 1.7 开始,Django 带有一个内置的迁移系统,由同一作者编写,尽管它仍然可以工作South,但已被弃用。syncdb

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

python manage.py makemigrations  
python manage.py migrate

了解幕后发生的事情会很有用,但这些是基础知识。如果您仍在阅读这篇旧文章,请提出新问题以获得有关 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 '';

您可以使用以下命令查看 Django 可能为生成新列所做的工作syncdb

python manage.py sqlall app_name

并从那里复制和粘贴ALTER TABLE语句。

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

于 2011-03-01T04:43:31.107 回答
11

在您的 django 中安装 south,您可以轻松处理现有的表。检查这个

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

python manage.py schemamigration --initial

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

python manage.py 迁移

那就是你的桌子被改变了。

于 2011-03-01T04:45:44.367 回答
0

迁移应用程序还有其他选项(尽管 South 是最常用的)。

我在我的项目中使用了django-evolution,它很容易安装和开始使用。

South 似乎更完整,但对于更简单的任务,django-evolution 可能更适合。

于 2011-03-01T13:37:37.740 回答