更改表结构而不删除数据

时间:2011-11-21 08:24:56

标签: django django-models

是django的新手,我想在不删除数据库中的数据的情况下向表中添加一列。命令

python manage.py reset polls

删除整个数据库中的数据

3 个答案:

答案 0 :(得分:6)

如果您只想添加新模型,可以使用manage.py syncdb。不幸的是,如果您更改了模型,则默认的Django命令无法为您执行此操作。

为了使用现有数据更改模型,您将不得不告诉Django和数据库如何将数据从旧表迁移到新表。执行此操作的工具称为South。关于它的一个很好的入门教程可以在这里找到:

http://south.aeracode.org/docs/tutorial/index.html

答案 1 :(得分:3)

我做了这样的改变:

使用新列更改模型。

class Book(models.Model):
    title = models.CharField(maxlength=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    newColumn = models.DateField()

显示新的create table命令: python manage.py sqlall

blah blah
CREATE TABLE "books_book" (
    "id" serial NOT NULL PRIMARY KEY,
    "title" varchar(100) NOT NULL,
    "publisher_id" integer NOT NULL REFERENCES "books_publisher" ("id"),
    "newColumn" date NOT NULL
);

我手动更改数据库中的表:

mysql -u xxx -p dbxxx
alter table ttttt add column "newColumn" date NULL;   (*1)

(* 1)应该由Null或您必须通知默认值

如果需要,请记住创建索引和其他约束。

多数人。

答案 2 :(得分:0)

除了danihp回答,如果你有大项目,你可以使用

python manage.py sql <app_name>

所以在你的情况下:

python manage.py sql polls

这样你只得到“polls”sql子句。