django的ORM基礎操作
阿新 • • 發佈:2020-09-08
'''ORM基礎操作''' '''orm返回的兩種資料型別: 1.QuerySet 2.object''' '''1.QuerySet''' # 支援鏈式程式設計,可以在all後面加方法 qs = models.Teacher.objects.all() #獲取全部 Teacher資料qs,返回的是QuerySet name = qs.values('name') #通過value欄位進行過濾,獲取我們希望獲取到的欄位 print(name) #返回QuerySet count = qs.count() #獲取qs的個數 print(count) firstData = qs.first() #獲取qs的第一個資料,等同於list[0] print(firstData) #返回的是object valueList = qs.values_list('name') #只獲取資料中的value print(valueList) #返回QuerySet '''2.object''' teacher = models.Teacher.objects.get(id=1) #返回的是object print(teacher.name) teacher = models.Teacher.objects.first() #只獲取第一個資料obj name = teacher.name #獲取其中一個欄位 teacher = models.Teacher.objects.raw('select * from teacher;') #執行原生sql qs '''過濾 orm filter sql的where條件''' teacher = models.Teacher.objects.filter(name__contains='吳') #過濾,模糊查詢, ==sql中% print(teacher) teacher = models.Teacher.objects.filter(name__endswith='牛') #過濾,以什麼結尾 print(teacher) teacher = models.Teacher.objects.filter(name__startswith='牛') #過濾,以什麼開始 print(teacher) teacher = models.Teacher.objects.filter(name__in=['馮璐','牛牛']) #過濾,在什麼範圍內 ==sql的in條件 print(teacher) teacher = models.Teacher.objects.filter(name__in=['馮璐','牛牛1']) #過濾,在什麼範圍內 ==sql的in條件 print(teacher) teacher = models.Teacher.objects.filter(name_isnull=True) #過濾,為空 teacher = models.Teacher.objects.filter(id__gt=1) #過濾,大於 print(teacher) teacher = models.Teacher.objects.filter(id__gte=1) #過濾,大於等於 print(teacher) teacher = models.Teacher.objects.filter(id__lt=1) #過濾,小於 print(teacher) teacher = models.Teacher.objects.filter(id__lte=1) #過濾,小於等於 print(teacher) teacher = models.Teacher.objects.filter(id__range=[1,4]) #過濾,在1到4之間 between and,包括4 print(teacher) '''排除,排除的方法和上面的filter是一樣的''' teacher = models.Teacher.objects.exclude(id__gt=2) #排除id大於2的 其他用法和filter相同 print(teacher) teacher = models.Teacher.objects.exclude(name='牛牛') print(teacher) '''多條件查詢''' # and操作 teacher = models.Teacher.objects.filter(id=1,name='牛牛') #where id=1 and name='牛牛' print(teacher) # or操作 # 通過django中提供的q來實現負責的過濾 # 匯入 from django.db.models import Q teacher =models.Teacher.objects.filter(Q(name='大師兄')&Q(id=4)) #&相當於sql中的and print(teacher) teacher =models.Teacher.objects.filter(Q(name='大師兄')|Q(id=2)) #&相當於sql中的or print(teacher) # 在 Q前面可以通過~取反,代表name!=大師兄 and id=2 teacher =models.Teacher.objects.filter(~Q(name='大師兄')&Q(id=2)) print(teacher) # 使用Q之外,還可以使用關鍵字引數,再次進行過濾,Q必須寫在關鍵字引數的前面 teacher =models.Teacher.objects.filter(~Q(name='大師兄')&Q(id=3),name__contains='吳') print(teacher)