對Django項目中的ORM映射與模糊查詢的使用詳解
ORM映射
什么是ORM映射?在筆者認(rèn)為就是對SQL語句的封裝,所寫語句與SQL對應(yīng)語句含義相同,使開發(fā)更加簡單方便,不過也是存在弊端的,使程序運行效率下降。例如:
UserInfo.objects.get(id=2)
等于
select * from user_userinfo where id=2
修改管理器(models.py)
導(dǎo)入新的包:from django.db import models
進(jìn)行模糊查詢
開始進(jìn)行查找前我們先來認(rèn)識filter()方法。
這是一個過濾器方法用于過濾掉不符合條件的元素。
值得一提的是其內(nèi)自帶方法函數(shù)的引用方式為‘__方法名稱'。
__exact 精確等于 like ‘a(chǎn)aa'
__iexact 精確等于 忽略大小寫 ilike ‘a(chǎn)aa'
__contains 包含 like ‘%aaa%'
__icontains 包含 忽略大小寫 ilike ‘%aaa%',但是對于sqlite來說,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一個list范圍內(nèi)
__startswith 以…開頭
__istartswith 以…開頭 忽略大小寫
__endswith 以…結(jié)尾
__iendswith 以…結(jié)尾,忽略大小寫
__range 在…范圍內(nèi)
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
舉幾個例子:
obj1 = UserInfo.objects.filter(user_name__contains='王')#以‘王'開頭的user__name obj2 = UserInfo.objects.filter(user_name__endswith='王')#以‘王'結(jié)尾的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的內(nèi)容后排除phone等于188的,它的另一種寫法為 from django.db.models import Q obj = UserInfo.objects.filter(Q(password='123456') & Q(id__gt=2) & ~Q(phone=188))
計算和和最大值:
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'))
統(tǒng)計個數(shù)
print(UserInfo.objects.count())#注:print只可于終端查看
范圍查找
obj = UserInfo.objects.all()[1:3]#左閉右開,只查找了1和2
去重復(fù)
obj = person.useraddress_set.all()
而get方法與filter的最大區(qū)別為,get只能返回一個數(shù)據(jù),filter可以返回多個,在get查找到兩個以上數(shù)據(jù)時就會報錯。
obj4 = UserInfo.objects.get(id=5) city = UserAddress.objects.get(detail='北京望京')
以上這篇對Django項目中的ORM映射與模糊查詢的使用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python數(shù)據(jù)合并的concat函數(shù)與merge函數(shù)詳解
大家都知道concat()函數(shù)可以沿著一條軸將多個對象進(jìn)行堆疊,其使用方式類似數(shù)據(jù)庫中的數(shù)據(jù)表合并,在使用merge()函數(shù)進(jìn)行合并時,默認(rèn)會使用重疊的列索引做為合并鍵,即取行索引重疊的部分,本文給大家介紹python?數(shù)據(jù)合并concat函數(shù)與merge函數(shù),感興趣的朋友一起看看吧2022-05-05結(jié)合Python的SimpleHTTPServer源碼來解析socket通信
SimpleHTTPServer是Python中一個現(xiàn)成的HTTP服務(wù)器例子,本文我們將結(jié)合Python的SimpleHTTPServer源碼來解析socket通信,我們先來看一下socket的基本概念:2016-06-06如何利用飾器實現(xiàn) Python 函數(shù)重載
這篇文章主要介紹了如何利用飾器實現(xiàn) Python 函數(shù)重載,需要的朋友可以參考下面文章內(nèi)容,希望能幫助到你2021-09-09pytorch讀取圖像數(shù)據(jù)轉(zhuǎn)成opencv格式實例
這篇文章主要介紹了pytorch讀取圖像數(shù)據(jù)轉(zhuǎn)成opencv格式實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Django?報錯:Broken?pipe?from?('127.0.0.1',?5892
這篇文章主要介紹了Django?報錯:Broken?pipe?from?('127.0.0.1',?58924)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09