前面我们讲到,在models.py里面创建类之后,执行命令:
python manage.py makemigrations
python manage.py migrate
可以在数据库里面创建表,同样我们也可以对表结构、数据进行修改
1、删除表、删除表的列
同理
在做表的删除、表结构列删除时,同样可以
做法是注释掉一个类,或者某个属性
再执行下面的命令:
python manage.py makemigrations
python manage.py migrate
2、新增表的列
django里面在新增列的时候方式不同,我现在给类新增一个属性值
from django.db import models
# Create your models here.
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
address = models.CharField(max_length=100) # 新增列
执行命令:python manage.py makemigrations
结果会出现下面的提示:
D:\mysite>python manage.py makemigrations
It is impossible to add a non-nullable field 'address' to userinfo without specifying a default. This is because the database needs something to populate existing rows.
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit and manually define a default value in models.py.
Select an option:
要你选择,1表示你新增了一列,自己设定默认值,2表示退出选择,使用默认的值
选择1,会提示要你继续输入
选择2,退出,需要你去代码里面给出默认值
我们来看2的做法:
设置一个默认值.
from django.db import models
# Create your models here.
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
address = models.CharField(max_length=100, default='武汉') # 新增列,设定一个默认值
其实还有3的做法,就是新增列的时候允许为空:
from django.db import models
# Create your models here.
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
address = models.CharField(max_length=100, null=True, blank=True) # 新增列,允许为空
OK,修改完类之后,执行命令更新数据库
3、小结
我们需要修改表结构的时候
去对应的models.py里面修改类,然后执行:
python manage.py makemigrations
python manage.py migrate