django将以前的数据保存在数据库中

时间:2015-02-16 08:45:23

标签: python django postgresql

我在我的django网站中使用postgresql_psycopg2数据库。以前我在测试的基础上使用了sqlite3,但是我已经离开了它,因为现在我要在服务器中运行我的项目,所以我们知道在sqlite3如果我们编辑模型,那么我们必须删除整个数据库,因为据我所知,sqlite3没有提供任何数据库更新服务或迁移服务。

所以我已经切换到postgresql_psycopg2。因为我是django的新手,现在我怎样才能在更新模型后保留以前的数据。

例如我有一个 照片模型类似这样的事情,

class Photo(models.Model):
    name = models.CharField(max_length = 100)
    photo = models.ImageField(upload_to = 'photos', blank=False,null=True)
    approved = models.BooleanField(default = False)
    approved_time = models.DateTimeField(auto_now=True,null=True,blank=True)
    uploaded_time = models.DateTimeField()
    description = models.CharField(max_length = 500 , blank = False , null = True)
    keyword = models.CharField(max_length = 500 , blank = False , null = True)
    user = models.ForeignKey(User)

现在我想在我的Photo模型中添加一个额外字段

class Photo(models.Model):
    name = models.CharField(max_length = 100)
    photo = models.ImageField(upload_to = 'photos', blank=False,null=True)
    approved = models.BooleanField(default = False)
    approved_time = models.DateTimeField(auto_now=True,null=True,blank=True)
    uploaded_time = models.DateTimeField()
    description = models.CharField(max_length = 500 , blank = False , null = True)
    keyword = models.CharField(max_length = 500 , blank = False , null = True)
    user = models.ForeignKey(User)
    #new field added
    photo_dpi = models.CharField(max_length = 500 , blank = False , null = True)

现在,如何在添加新字段后保留以前的数据。

2 个答案:

答案 0 :(得分:1)

您应该使用迁移来编辑数据库结构:

https://docs.djangoproject.com/en/1.7/topics/migrations/

或者,如果您的django版本低于1.7,则南方包:

http://south.readthedocs.org/en/latest/

答案 1 :(得分:1)

只需运行makemigrationsmigrate命令:

python manage.py makemigrations
python manage.py migrate
django 1.7以来,

更新makemigrations / migrate命令可用。

正如@ eugene-soldatov在他对django 1.5的回答中提到的那样,你可以使用South app。

另一种选择是通过执行以下SQL查询手动更改表:

echo "ALTER TABLE myapp_photo ADD COLUMN photo_dpi VARCHAR(500) NULL;" | python manage.py dbshell

其中myapp是您的申请名称。