對(duì)Django項(xiàng)目中的ORM映射與模糊查詢的使用詳解
ORM映射
什么是ORM映射?在筆者認(rèn)為就是對(duì)SQL語(yǔ)句的封裝,所寫(xiě)語(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 精確等于 忽略大小寫(xiě) ilike ‘a(chǎn)aa'
__contains 包含 like ‘%aaa%'
__icontains 包含 忽略大小寫(xiě) ilike ‘%aaa%',但是對(duì)于sqlite來(lái)說(shuō),contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一個(gè)list范圍內(nèi)
__startswith 以…開(kāi)頭
__istartswith 以…開(kāi)頭 忽略大小寫(xiě)
__endswith 以…結(jié)尾
__iendswith 以…結(jié)尾,忽略大小寫(xiě)
__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的,它的另一種寫(xiě)法為 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='北京望京')
以上這篇對(duì)Django項(xiàng)目中的ORM映射與模糊查詢的使用詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Python IDLE 下調(diào)用anaconda中的庫(kù)教程
這篇文章主要介紹了在Python IDLE 下調(diào)用anaconda中的庫(kù)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Tornado Web Server框架編寫(xiě)簡(jiǎn)易Python服務(wù)器
這篇文章主要為大家詳細(xì)介紹了Tornado Web Server框架編寫(xiě)簡(jiǎn)易Python服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
10分鐘學(xué)會(huì)使用python實(shí)現(xiàn)人臉識(shí)別(附源碼)
這篇文章主要介紹了10分鐘學(xué)會(huì)使用python實(shí)現(xiàn)人臉識(shí)別(附源碼),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
解決matplotlib庫(kù)show()方法不顯示圖片的問(wèn)題
今天小編就為大家分享一篇解決matplotlib庫(kù)show()方法不顯示圖片的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Python基礎(chǔ)之面向?qū)ο筮M(jìn)階詳解
這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)之面向?qū)ο筮M(jìn)階,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
PyTorch實(shí)現(xiàn)手寫(xiě)數(shù)字的識(shí)別入門(mén)小白教程
這篇文章主要介紹了python實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別,非常適合小白入門(mén)學(xué)習(xí),本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Python+Pygame實(shí)現(xiàn)之見(jiàn)縫插針游戲的實(shí)現(xiàn)
這篇文章主要為大家介紹了如何利用Python中的Pygame模塊實(shí)現(xiàn)見(jiàn)縫插針游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python游戲開(kāi)發(fā)有一定幫助,需要的可以參考一下2022-07-07

