12月7日学习内容整理:ORM单表操作
补充:url(r"^$") 代表只匹配域名,没有路径部分
一、添加:
1、方式一:昨天讲过的实例化对象
2、方式二:
stu_obj=类名(就是表名).objects.create(name='',birth='',class_id='')
返回的是一个记录对象,也就是一个model对象
二、删除和更改
首先要进行查询
再删除或更改
1、删除
类名.objects.all().delete() 使用delete这样就删掉了
2、更改
类名.objects.all().update(字段1=字段值1,字段2=字段值2,....) 这样就是修改,也可以**字典这样去传参w
三、查询:类名就是表名
查询相关的接口::::
1、类名.objects.all()
》》》查询表中所有记录
》》》返回queryset类型,类似一个列表,列表中的元素是一个实例对象,也就是记录对象(model对象),可以用句点符返回字段值
这个列表实际上是Django封装的QuerySet类型:[< >,< >,< >]这样的形式
2、类名.objects.filter(字段名1=字段值1,字段名2=字段值2,...)
》》》过滤查询,根据过滤条件查询,逗号表示且的关系
》》》返回queryset类型,元素就是符合条件的model对象
3、类名.objects.exclude(字段1=字段值,......)
》》》找出不符合条件的记录
》》》返回queryset类型
4、类名.objects.all().first()
5、类名.objects.all().last()
》》》找出查询后的第一条记录或者最后一条记录
》》》直接返回model对象,默认按主键升序排序
6、类名.objects.all().order_by(字段名)
》》》查询后的记录按照指定的字段名排序,默认升序,字段名前面加-就代表降序
》》》返回queryset类型
7、类名.objects.all().values(字段1,字段2,....)
》》》查询记录中指定的字段值
》》》返回queryset类型,但是元素不是对象,而是字典,[{"字段1":"字段值","字段2":"字段值"},{"字段1":"字段值","字段2":"字段值"}]类似这样的形式
8、类名.objects.all().values_list(字段1,字段2,......)
》》》查询记录中指定的字段值
》》》返回queryset类型,但是元素不是对象,而是元组,[(字段值1,字段值2),(字段值1,字段值2),(字段值1,字段值2)]类似这样的形式
9、类名.objects.all().count()
》》》查询记录的个数
》》》返回的是数字
10、类名.objects.all().reverse()
》》》将查询结果方向排序
》》》返回queryset类型
11、类名.objects.all().get(字段名=字段值)
》》》根据条件查询某一个记录,若没有符合条件的或者符合条件的不止一个就会报错,所以要求必须有且仅能查询到一个符合条件的记录
》》》返回model对象
12、类名.objects.values().distinct()
》》》将查询到的记录去重,一般跟vlaues和values_list用,查询的字段要有重复的可能性,去重才有意义
》》》返回queryset类型,注意元素是字典还是元组要看和values还是values_list用
13、类名.objects.all().exists()
》》》只查询一条记录看是否有数据
》》》返回true或false
单表查询中的双下划线::::
字段名_ _gt=2 大于2
字段名_ _contains="w" 包含w,w在里面
字段名_ _icontains="w" 包含w,但是对大小写不敏感
字段名_ _lt=3 小与3
字段名_ _in=[11,22,33] 11和22和33的其中一个
字段名_ _range=[1,3] 在1-3的范围内,包含1和3
字段名_ _startswith="d" 以d开头
字段名_ _endswith="d" 以d结尾
字段名_ _istartswith="d" 以d开头,对大小写不敏感
字段名_ _iendswith="d" 以d结尾,对大小写不敏感