6、exclude(age__in=[11,32]) 不包含
7、 xx__contains() (包含某个字符的记录)和xx__icontains() (忽略大小写的包含)
9、xx__startwith (获取以xx开头的记录) xx__istartwith(获取以xx开头的记录,忽略大小写)
10、xx__endwith( 获取以xx结尾的记录) xx__iendwith(获取以xx结尾的记录,忽略大小写)
一、models对象常用的方法
1、all()
查询所有结果 QuerySet对象,输出结果的数据类型是一个列表类型,列表中的元素对应每一行的元素
2、filter(**kwargs)
包含所有筛选条件符合的对象 输出结果的数据类型是一个列表类型,列表中的元素对应每一行的元素
3、get(**kwargs)
返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
4、exclude(**kwargs)
它包含了与所给筛选条件不匹配的对象 返回的是一个QuerySet对象,是一个列表,列表内部是对应的每行元素的对象
5、values(*field)
返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 返回的是一个QuerySet对象,是一个列表,列表中嵌套的的是行元素组成的字典
6、values_list(*field)
它与values()非常相似,它返回的是一个元组序列,返回的是一个QuerySet对象,是一个列表,列表中嵌套的的是行元素中的值,每个值组成的元组形式
7、order_by(*field)
对查询结果排序 返回的是一个QuerySet对象,是一个列表,列表中嵌套的是排序后的结果对象
8、reverse()
对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。返回的是一个QuerySet对象,是一个列表,列表中嵌套的是排序后的结果对象
9、count()
返回数据库中匹配查询(QuerySet)的对象数量,是一个int类型
10、first()
返回第一条记录,返回结果是一个对象
11、last()
返回最后一条记录,返回结果是一个对象
当输出结果为空时,first和last方法可以返回空,但若对其进行索引调用则会出现报错情况
12、exists()
如果QuerySet包含数据,就返回True,否则返回False 输出为boolean类型,不需要使用参数
二、双下划线使用
1、xx__lt 小于
xx__lt 小于
2、xx__gt 大于
xx__gt 大于
3、xx__lte 小于等于
xx__lte 小于等于
4、xx__gte 大于等于
xx__gte 大于等于
5、xx__in 包含某些值
ret = person_model.filter(age__in=[12,22])
6、exclude(age__in=[11,32]) 不包含
exclude(age__in=[11,32]) 不包含
7、 xx__contains() (包含某个字符的记录)和xx__icontains() (忽略大小写的包含)
xx__contains() 包含某个字符的记录
xx__icontains() 忽略大小写的包含
8、xx__range 查找范围
xx__range 查找范围
9、xx__startwith (获取以xx开头的记录) xx__istartwith(获取以xx开头的记录,忽略大小写)
ret = person_model.filter(name__startwith='t')
ret = person_model.filter(name__istartwith='t')
10、xx__endwith( 获取以xx结尾的记录) xx__iendwith(获取以xx结尾的记录,忽略大小写)
ret = person_model.filter(name__endwith='t')
ret = person_model.filter(name__iendwith='t')
11、 xx__date 可以根据年月日进行过滤
ret = person_model.filter(birthday__year=2019)
注:返回的所有结果均是列表形式,列表元素是查找到的结果的详细信息
三、一对多关系
(一)查询
1、正向查询 查询对应学科
student_obj = models.Student.objects.get(name = 'zs')
subiect_obj = models.Subiect.objects.get(id=student_obj.subject_id)
#或者
subiect_obj = student_obj.subject #返回一个对象
2、反向查询 查询学Python的学员
sub = models.Subject.objects.get(name="python")
stu = sub.student_set.all() # 默认使用 类名小写_set 属性进行关联
(二)增加
1、正向增加
##方法一
sub = models.Subject.objects.get(name='java')
stu = models.Student()
stu.name = '钩子'
stu.subject_id = sub.id
stu.save()
##方法二
stu = models.Student.objects.create(
name = 'lianzi',
subject = sub
)
2、反向增加
java学科新增一个学员
sub = models.Subject.objects.get(name='java')
sub.student_set.create(name='Lianzi')
(三)删除
models.Student.objects.get(name='钩子').delete()
models.Student.objects.filter(name__contains='子').delete()
# java科目毕业 级联删除学员
models.Subject.objects.get(name='java').delete()
(四)修改
1、正向修改
##方法一
# zs转学java
sub = models.Subject.objects.get(name='java')
stu = models.Student.objects.get(name='zs')
stu.subject = sub
stu.save()
##方法二
sub = models.Subject.objects.get(name='java')
models.Student.objects.filter(name='zs').update(subject=sub)
2、反向修改
sub = models.Subject.objects.get(name='java')
stu1 = models.Student.objects.get(name='zs')
stu2 = models.Student.objects.get(name='ls')
sub.student_set.set([stu1,stu2])