Django中常用的查詢數據方法及查詢對象的條件詳解
(1)常用的查詢方法:
1.獲取所有記錄:
s = User.objects.all()
2.獲取第一條數據:
s = User.objects.first()
3.獲取最後一條數據:
s = User.objects.last()
關於二、三兩個方法註意點:
對於QuerySet對象,我們也是可以通過下標取值獲取對應的實例對象。如下所示——雖然這兩個方法作用一致(獲取到對應的實例對象),但是推薦使用(而且一般使用的)都是first()方法及last()方法。
原因——如果查詢的數據不存在的話,使用下標查詢會報錯;但是使用first()方法不會報錯,會返回None。
s = User.objects.filter(age=18).first() #獲取QuerySet中的第一條數據 s2 = User.objects.filter(age=18).last() #獲取QuerySet中的最後一條數據 s = User.objects.filter(age=18)[0] print(s)
應用場景:
a = User.objects.get(id=56) #使用get方法獲取一個實例對象,我們可以保證id不會重復,但是不能保證id為56的數據是否存在 #但是使用.first()方法哪怕它不存在也不會報錯! a = User.objects.filter(id=56).first()
4.根據參數提供的條件獲取過濾後的記錄:
【註意:filter(**kwargs)方法:根據參數提供的提取條件,獲取一個過濾後的QuerySet】
s = User.objects.filter(name= "xiaoming" ) # 過濾得到name為xiaoming的數據
5.排除name為xiaoming的數據:
s = User.objects.exclude(name='xiaoming')
6.獲取一個記錄對象:
【註意:get返回的對象具有唯一性質,如果符合條件的對象有多個,則get報錯!】
s = User.objects.get(name = "xiaoming" )
7.對結果排序:
#根據age升序排序: c = User.objects.all().order_by("age") #根據age逆向排序: c2 = User.objects.all().order_by("-age") #雙重排序:age升序排序,如果有age相同的則以id升序排序: c3 = User.objects.all().order_by("age","id")
8.將返回的QuerySet中的Model轉換為字典:
s = User.objects.all().values() #作用:現在是字典形式瞭(之前的QuerySet是類似於列表的對象),就可以使用字典的方法進行獲取數據瞭: print(s[0].get("name"))
QuerySet對象格式:
<QuerySet [<User: name:taka, age:18>, <User: name:xiaopo, age:18>, <User: name:xiaohong, age:18>]>
使用values()方法轉變後的格式:
<QuerySet [{'id': 1, 'name': 'taka', 'age': 18}, {'id': 2, 'name': 'xiaopo', 'age': 18}, {'id': 3, 'name': 'xiaohong', 'age': 18}]>
9.獲取當前查詢到的數據的總數:
e = User.objects.count() # (所有QuerySet對象都可以使用此方法)
(2)常用的查詢對象的條件:
查找對象的條件的意思是傳給以上方法的一些參數。相當於是SQL語句中的where語句後面的條件,語法為字段名__規則!
1.exact相當於等號:(以下兩種方法作用一致!)
rs = User.objects.filter(name__exact='xiaoming') rs = User.objects.filter(name='xiaoming')
2.iexact:跟exact差不多,隻是忽略大小寫的匹配。
3.contains 包含:
rs = User.objects.filter(name__contains='xiao') #查詢name屬性值中包含xiao的
4.icontains跟contains差不多,隻是忽略大小寫。
5.startwith 以什麼開始:
rs = User.objects.filter(name__startswith='xiao') # 查詢name屬性值以xiao開頭的
6.istartwith跟startwith差不多,隻是忽略大小寫。
7.endwith 以什麼結尾:。
8.isendwith跟endwith差不多,隻是忽略大小寫。
9.in 成員所屬:
rs = User.objects.filter(age__in=[18,19,20]) # 查詢age值為18,19,20的數據
10.gt大於
rs = User.objects.filter(age__gt=20) # 查詢age值大於20的數據
11.gte 大於等於。
12.lt 小於。
13.lte 小於等於。
14.range 區間,包含兩頭。
rs = User.objects.filter(age__range=(18,20)) # 查詢age值在18-20之間的數據(包含18和20)
15.isnull 判斷是否為空。
總結
到此這篇關於Django中常用的查詢數據方法及查詢對象的條件的文章就介紹到這瞭,更多相關Django查詢數據方法及條件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用Django框架中ORM系統實現對數據庫數據增刪改查
- django中操作mysql數據庫的方法
- Django與數據庫交互的實現
- Django中get()和filter()返回值區別詳解
- django模型查詢操作的實現