Django 同步数据库问题
在Django的模型中,假设这个模型存在于details/models.py文件里。
class OccDetails(models.Model):
title = models.CharField(max_length = 255)
occ = models.ForeignKey(Occ)
当我们执行数据库同步时,会创建出以下这些字段。
后来又添加了两个新字段,但在再次同步数据库时,这些新字段并没有被创建。这个问题该怎么解决呢?另外,下面提到的auto_now=true是什么意思呢?
这些是新添加的字段:
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True, auto_now=True)
2 个回答
3
7
syncdb 是一个命令,它会为所有在 INSTALLED_APPS 列表中的应用创建数据库表,前提是这些表还没有被创建。
Syncdb 不会修改已经存在的表
syncdb
只会为那些还没有安装的模型创建表。它不会执行ALTER TABLE
这样的命令来更新已经安装的模型类的表结构。如果模型类和数据库结构发生了变化,通常会有一些不确定性,这时候 Django 可能会猜测该做什么更改。这可能会导致重要数据的丢失。
你可以选择:
- 手动执行
ALTER TABLE
命令 - 使用
DROP TABLE
删除特定的表(这样会丢失数据),然后再运行 syncdb - 运行 django-admin sqlclear 来获取清空整个数据库的 SQL 语句列表,并执行这些命令(这会清空数据库 - 你会丢失所有现有数据)或者
DateField.auto_now
:每次保存对象时,自动将这个字段设置为NOW()
。这对于记录“最后修改”时间戳非常有用。请注意,始终使用当前日期;这不是一个可以覆盖的默认值。
因此,每次你调用 object.save()
时,modified_date
列会自动更新。