溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django項(xiàng)目中ORM映射與模糊查詢?cè)趺从?/h1>
發(fā)布時(shí)間:2021-08-12 10:59:51 來(lái)源:億速云 閱讀:103 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了Django項(xiàng)目中ORM映射與模糊查詢?cè)趺从?,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

ORM映射

什么是ORM映射?在筆者認(rèn)為就是對(duì)SQL語(yǔ)句的封裝,所寫語(yǔ)句與SQL對(duì)應(yīng)語(yǔ)句含義相同,使開(kāi)發(fā)更加簡(jiǎn)單方便,不過(guò)也是存在弊端的,使程序運(yùn)行效率下降。例如:

UserInfo.objects.get(id=2)

等于

select * from user_userinfo where id=2

修改管理器(models.py)

導(dǎo)入新的包:from django.db import models

進(jìn)行模糊查詢

開(kāi)始進(jìn)行查找前我們先來(lái)認(rèn)識(shí)filter()方法。

這是一個(gè)過(guò)濾器方法用于過(guò)濾掉不符合條件的元素。

值得一提的是其內(nèi)自帶方法函數(shù)的引用方式為‘__方法名稱'。

__exact 精確等于 like ‘a(chǎn)aa'

__iexact 精確等于 忽略大小寫 ilike ‘a(chǎn)aa'

__contains 包含 like ‘%aaa%'

__icontains 包含 忽略大小寫 ilike ‘%aaa%',但是對(duì)于sqlite來(lái)說(shuō),contains的作用效果等同于icontains。

__gt 大于

__gte 大于等于

__lt 小于

__lte 小于等于

__in 存在于一個(gè)list范圍內(nèi)

__startswith 以…開(kāi)頭

__istartswith 以…開(kāi)頭 忽略大小寫

__endswith 以…結(jié)尾

__iendswith 以…結(jié)尾,忽略大小寫

__range 在…范圍內(nèi)

__year 日期字段的年份

__month 日期字段的月份

__day 日期字段的日

__isnull=True/False

舉幾個(gè)例子:

obj1 = UserInfo.objects.filter(user_name__contains='王')#以‘王'開(kāi)頭的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方法,排除選項(xiàng)。

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

計(jì)算和和最大值:

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)計(jì)個(gè)數(shù)

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

范圍查找

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

去重復(fù)

obj = person.useraddress_set.all()

而get方法與filter的最大區(qū)別為,get只能返回一個(gè)數(shù)據(jù),filter可以返回多個(gè),在get查找到兩個(gè)以上數(shù)據(jù)時(shí)就會(huì)報(bào)錯(cuò)。

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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Django項(xiàng)目中ORM映射與模糊查詢?cè)趺从谩边@篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI