Django ORM中的模糊查詢

ORM映射
什麼是ORM映射?在筆者認爲就是對SQL語句的封裝,所寫語句與SQL對應語句含義相同,使開發更加簡單方便,不過也是存在弊端的,使程序運行效率降低。例如:sql

UserInfo.objects.get(id=2)
等於
select * from user_userinfo where id=2

修改管理器(models.py)
導入新的包:from django.db import models
進行模糊查詢
開始進行查找前咱們先來認識filter()方法。
這是一個過濾器方法用於過濾掉不符合條件的元素。
值得一提的是其內自帶方法函數的引用方式爲‘__方法名稱’。
__exact 精確等於 like ‘aaa’
__iexact 精確等於 忽略大小寫 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小寫 ilike ‘%aaa%’,可是對於sqlite來講,contains的做用效果等同於icontains。
__gt 大於
__gte 大於等於
__lt 小於
__lte 小於等於
__in 存在於一個list範圍內
__startswith 以…開頭
__istartswith 以…開頭 忽略大小寫
__endswith 以…結尾
__iendswith 以…結尾,忽略大小寫
__range 在…範圍內
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
舉幾個例子:django

obj1 = UserInfo.objects.filter(user_name__contains='')#以‘王’開頭的user__name
obj2 = UserInfo.objects.filter(user_name__endswith='')#以‘王’結尾的user__name
obj3 = UserInfo.objects.filter(id__gte=5)#ID大於等於5的
obj5 = UserInfo.objects.filter(id__exact=5)#id等於5的
obj6 = UserInfo.objects.filter(id__in=[1,3,5])#id等於1,3,5,的

exclude方法,排除選項。函數

obj8 = UserInfo.objects.filter(password='123456',id__gt=2).exclude(phone=188)
#找到符合filter的內容後排除phone等於188的,它的另外一種寫法爲
from django.db.models import Q
obj = UserInfo.objects.filter(Q(password='123456') & Q(id__gt=2) & ~Q(phone=188))

計算和和最大值:spa

from django.db.models import Sum,Max,Min
obj = UserInfo.objects.aggregate(Sum('id'))
obj = UserInfo.objects.aggregate(Max('id'))
obj = UserInfo.objects.aggregate(Min('id'))

統計個數code

print(UserInfo.objects.count())#注:print只可於終端查看

範圍查找sqlite

obj = UserInfo.objects.all()[1:3]#左閉右開,只查找了1和2

去重複blog

obj = person.useraddress_set.all()

而get方法與filter的最大區別爲,get只能返回一個數據,filter能夠返回多個,在get查找到兩個以上數據時就會報錯。ci

obj4 = UserInfo.objects.get(id=5)
city = UserAddress.objects.get(detail='北京望京')開發

相關文章
相關標籤/搜索