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])