我在我的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)
现在,如何在添加新字段后保留以前的数据。
答案 0 :(得分:1)
您应该使用迁移来编辑数据库结构:
https://docs.djangoproject.com/en/1.7/topics/migrations/
或者,如果您的django版本低于1.7,则南方包:
答案 1 :(得分:1)
只需运行makemigrations
和migrate
命令:
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
是您的申请名称。