六、Django之orm创建、修改表(makemigrations)

创建表

打开model.py,在里面写上如下代码:

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

其中类的形参model.Model是固定的。整个类会在底层被翻译成一段sql语句,其中创建的表名是app名_类名的小写,在这即是app01_userinfo,且会自动添加一句id bigint auto_increment primary_key

create table app01_userinfo(
    id bigint auto_increment primary_key,
    name varchar(32),
    password varchar(64),
    age int
)

整体操作截图:

然后在pycharm的终端里前后执行以下两个命令:

python manage.py makemigrations
python manage.py migrate

此时查看gx_day15下是否有新建表,可通过cmd或者navicate进行查询。

 

 注意,gx_day15下还有很多其他的表。这些表其实是Django框架自带的,暂时可以不用管,后续如果真的不想要的话,可以去将settings.py里的INSTALLED APP的相应字段注释掉。

至此,创建表成功。

修改表

增加表、删除表,删除表中字段,orm操作起来都很方便。

增加表,则是在models.py里写对应的class,随后执行步骤一。

删除表,则是在models.py里将对应的class注释掉。随后执行步骤一。

删除表中字段,则是在models.py中对应的class对应的字段注释掉。随后执行步骤一。

(步骤一是指在pycharm的终端里先后执行python manage.py makemigrations和python manage.py migrate)

但是增加表中字段,需要额外注意。譬如此刻我们想往userinfo里增加一个int类型的stu_id

在models.py中增加stu_id = models.IntegerField()后,执行步骤一,发现出现以下内容

翻译过来是: 

在不指定默认值的情况下,无法将不可为null的字段“stu_id”添加到userinfo。这是因为数据库需要一些东西来填充现有的行。

请选择一个修复程序:

1) 立即提供一次性默认值(将在该列具有null值的所有现有行上设置)

2) 退出并在models.py中手动定义默认值。

选择一个选项:

实际这就是orm框架为了严谨,想用一个值覆盖新增字段在原来的表的空间的值。

(譬如,原来的表只有id、name、password、age四个字段,但是空间不止这四个字段。假设新增字段会占据原来空间中的b空间,那么我们无法知道b空间原本是否存储着非法字符。如果此时用一个值覆盖掉b空间的所有值,则利于保证我们后续新增字段,访问b空间时的安全性)。

如果选1,他会出现以下信息:

只用看第一行“Please enter the default value as valid Python.”就好了,其中文是指“请输入默认值让Python有效。” ,于是我们输入有效的默认值,如5。

可以发现,他说“Add field stu_id to userinfo”,实际上就是成功添加字段的意思。随后正常执行migrate命令即可。打开cmd查看表结构,发现确实多了一个字段stu_id。

接下来我们增加一个tea_id = models.IntegerField(),用来测试选2的效果。

如果选2,他会直接退出,不执行python manage.py makemigrations。因为选项2的意思是退出并在models.py中手动定义默认值。

此时我们可以修改代码如下:

再次执行两条命令,发现不会出现选项12的选择了。

 查看表结构,发现多了tea_id的字段(此为navicat查看,也可以用cmd查看)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡鸭扣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值