get和filter()的區(qū)別。
1、get
輸入?yún)?shù):get的參數(shù)只能是model中定義的哪些字段,只支持嚴(yán)格匹配。
Entry.objects.get(id='foo') # raises Entry.DoesNotExist
返回參數(shù):get 返回值是一個(gè)定義的model對(duì)象,只有一條記錄返回的時(shí)候才正常,也就說(shuō)明get的查詢字段必須是主鍵或者唯一約束的字段。當(dāng)返回多條記錄或者是沒(méi)有找到記錄的時(shí)候都會(huì)拋出異常
捕獲異常實(shí)例:
try: result = sorts.objects.get(parentid=parentid, title=title) if result: return HttpResponse("<script>alert('同級(jí)類別名稱已經(jīng)存在');history.back();</script>") except sorts.DoesNotExist: print("tt")
2、filter
輸入?yún)?shù):filter的參數(shù)可以是字段也可以是擴(kuò)展的where查詢關(guān)鍵字,如in,like,返回QuerySet包含與給定查找參數(shù)匹配的新對(duì)象。
返回參數(shù):filter返回QuerySet對(duì)象,有沒(méi)有匹配的記錄都可以。
filter有緩存數(shù)據(jù)的功能,第一次查詢數(shù)據(jù)庫(kù)并生成緩存,下次再調(diào)用filter方法的話,直接取得緩存的數(shù)據(jù),get方法每次執(zhí)行都是直接查詢數(shù)據(jù)庫(kù)的。