1. 程式人生 > 實用技巧 >django的ORM基礎操作

django的ORM基礎操作

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