DjangoShell
DjangoShell可以替代来模拟程序运行的过程的环境,然后可以在这个Shell里面执行增删改查,比较方便,值得注意的是,每次修改代码都要重新启动DjangoShell
启动命令:
可以在djangshell直接操作model层
(资料图片仅供参考)
我比较习惯念增删改查。所以本文排班按增删改查来写,但是请您如果不幸看到这一篇学习笔记,请按CRUD(create read update delete)的顺序来阅读,因为UD都需要用到R的一些方法。以CRUD的顺序来阅读可以降低您阅读本文章的不悦。
增:
插入为主,获得对象是其次,比较方便
先构建对象为主,插入是其次
删:
对单个数据get()得到后,执行对象的delete方法
等于批量数据获取QuerySet后,执行QuerySet的delete方法
伪删除:数据是宝贵的,为了保留数据,我们可以多设置一个字段is_active来表面是否被删除,false是删除,删除就是把is_active改成false,但是如果使用了伪删除,那么显示的地方都需要确保有is_active=true的过滤条件
改:
修改采用一查二改三保存的思路
对单个数据的先get(),然后对象.属性修改,最后对象.save()保存
对一批数据则是先获取QuerySet然后紧接着调用QuerySet对象的updat方法
update可以实现批量修改和保存。
查:
为了让查询结果更加直观,我们要重写模型类的__str__方法,在springboot中这一块有lombol承包了。
all() 方法相当于数据库中的select * from table
得到的是一个对象数组
values(‘c1’,'c2')方法相当于数据库的select c1,c2 from table
得到是一个字典数组
values_list(‘c1’,'c2')的作用和效果和values()一致
但是返回的对象是元组数组,元组的值的应用需要索引来提取
order_by()方法相当于数据库的select * from table ORDERBY c1 desc,c2 (asc)
在列名前加-表示降序排序
得到的是一个对象数组
无论是返回了对象数组、字典数组还是元组数组,都是QuerySet对象
而上面的方法,都是QuerySet的方法,这样子的设计可以实现链式编程,方法的返回值也是调用方法的对象类型。
all、values、values_list、order_by,都是可以连续使用的,而且无论链式编写的顺序如何,最终都会按mysql的标准自动组装好,因为这个QuerySet对象的query属性记录了这些查询条件,最终组成了一个sql语句,query的值就是一个sql语句
如下:可以这样子组合使用
完成一个小练习巩固编码能力
filter()方法相当于mysql中的where条件查询,且默认多个条件之间的关系是and
返回的是一个对象数组
exclude()方法相当于syq中的where is not 条件查询,且默认多个条件之间的关系是and,返回的也是一个对象数组
get()方法类似于sql的limit 1,但是更像是mybatis的selectone,不同的是,get只搜出一条数据,且若满足条件的数据有多条,直接报错。而且若查不到,也报错
返回的是一个对象,一般都要放在try里面运行。
以上方法只能做相对确定的等值查询,不能灵活查询。为此,Django引入了查询谓词的定义
查询谓词:每一个查询谓词都是一个独立的查询功能
常见的查询谓词:
__contains:包含指定值 XXX,相当于 like“%XXX%”;
__startswith:以XXX开始 ,相当于 like "XXX%";
__endswith:以XXX结束,相当于like '%XXX';
__gt:大于指定值, __gte大于等于指定值 , __it小于 ,__ite:小于等于;
__in 查询数据是否在指定的数值内,colname__in=['c1','c2']
__range查询数据会否在是定的元组区间范围内、colval__range=(10,50)
小练习
通过这个练习来熟悉django的代码编写,django对个人开发者很友善,我在这个练习了算是体会到了。