前言
先拋出一個問題。銀行就相當于一個數據庫,你去銀行取錢存錢辦卡銷卡,是你告訴銀行柜員方便還是你自己去操作電腦辦卡取卡方便?(你還不一定會,假設自動存款機還沒發明),object在數據庫中就相當于銀行里得銀行柜員。
步入正題:
在django中的view.py中,我們可能回經常見到? book_set= Book.objects.all(),book_list = Book.objects.get()?
讓我們疑惑的問題是,objects是個什么東西,book_set 和book_list 又是個神馬東西?
object是Manager類型的對象,定義在from django.db import models中,是默認生成的,也就是objects = Modes.Manage() 。用途是數據庫和模型對象交互的接口(api)。book_set返回的是個集合,book_list返回的是個列表。book =?Book.objects.all(),這個翻譯成銀行得話就是,一個叫BOOK得人來到銀行,通過一個名叫objects得柜員,查詢BOOK得銀行余額和銀行卡信息,結果得到一個queryset對象
在book =BOOK.objects.get()或者book = BOOK.objects.all()中
- BOOK是類名,就是你在model中創建的類
- objects是django默認的管理器對象,就是剛才的比喻中的銀行柜員,幫你完成各種操作。
- get()或者all()是API,一種內置函數,也就是比喻鐘銀行柜員可以幫助我們完成的各種具體業務,不同的業務調用不同的API就可以了。
- book通過all()得到的就是要給queryset()對象,也就是查詢對象集合。
一,QuerySet 對象的創建方法
>> from blog.models import Blog >>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') >>> b.save()總之,一共有四種方法 # 方法 1 Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com")# 方法 2 twz = Author(name="WeizhongTu", email="tuweizhong@163.com") twz.save()# 方法 3 twz = Author() twz.name="WeizhongTu" twz.email="tuweizhong@163.com" twz.save()# 方法 4,首先嘗試獲取,不存在就創建,可以防止重復 Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com") # 返回值(object, True/False)
備注:前三種方法返回的都是對應的 object,最后一種方法返回的是一個元組,(object, True/False),創建時返回 True, 已經存在時返回 False
對比得知,object這個管理器對象幫了我們很多忙,我們不用實例化對象,不用save(),而是交給Author.object去實現。
舉個例子吧,如果我們把數據庫比作銀行,那么object對象就相當于柜員,能幫助你處理各種業務。如果沒有得話,去銀行取錢,我們得自己登記,自己去金庫拿錢,記賬,鎖門.........不太現實吧。同理,你去數據庫取個數據,沒有objects對象,是不是很麻煩?
其實換個角度來講,你去銀行辦理得一些業務,是銀行柜員幫你在銀行得數據庫里進行得增刪改查操作,銀行柜員得名字可以叫object(默認得名字),當然也可以叫小李,小王,不過你得自定義罷了。xiaoli = models.Manage()也是可以得。
你看看,此時此刻,有沒有認識到,一切皆對象,這個面向對象編程得偉大之處。
二,Django中查詢常用的API
# 查詢相關API:# <1>filter(**kwargs): 它包含了與所給篩選條件相匹配的對象# <2>all(): 查詢所有結果# <3>get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。#-----------下面的方法都是對查詢的結果再進行處理:比如 objects.filter.values()--------# <4>values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行后得到的并不是一系列 model的實例化對象,而是一個可迭代的字典序列# <5>exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象# <6>order_by(*field): 對查詢結果排序# <7>reverse(): 對查詢結果反向排序# <8>distinct(): 從返回結果中剔除重復紀錄# <9>values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列# <10>count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。# <11>first(): 返回第一條記錄# <12>last(): 返回最后一條記錄# <13>exists(): 如果QuerySet包含數據,就返回True,否則返回False。
另外關于ApI,給大家推薦一篇不錯得文章
https://blog.csdn.net/cumtdeyurenjie/article/details/80211896