Django的objects.get和objects.filter方法詳解和區別

一. django get方法和filter方法詳解

1.django的objects.get()方法:

django的get是從數據庫的取得一個匹配的結果,返回一個對象,如果記錄不存在的話,它會報錯。
比如我數據庫裏有一條記錄,記錄的name的值是"django"的話,我用student = Student.objects.get(name=‘django’),
返回的是一個記錄對象,你可以通過student.dict來查看,它返回的是一個字典的形式,{‘key’:valeus},key是字段的名稱,而values是值的內容。
而如果我用get方法來查詢一個數據庫裏不存在的記錄,程序會報錯。
比如:student = Student.objects.get(name=‘python’)

如果你用django的get去取得關聯表的數據的話,而關鍵表的數據如果多於2條的話也會報錯。
比如我的student表裏有一個記錄:
id name age
1 python 24

book表:

id student_id
1 1
2 1

我用
student = Student.objects.get(name=‘python’)
book = Book.objects.get(student)
它也會報錯,因爲book表有2條記錄和student表相匹配。

2.django的 objects.filter()方法:

django的filter方法是從數據庫的取得匹配的結果,返回一個對象列表,如果記錄不存在的話,它會返回[]。

比如我數據庫裏有一條記錄,記錄的name的值是Python的話,我用student = Student.objects.filter(name=‘python’)
它返回的student是一個對象的列表,可以看的出來student[0]和上面的get方式返回的student的結果是一樣的。

二. 最大區別:

get返回的是一個對象,並不是一個列表,相反filter得到的纔是一個列表(一個對象列表)。因此當對象不存在時,get會報錯,而filter則不會,返回一個空列表(沒有對象)。

所以可以這樣認爲,get方法只能取到一個對象,而filter方法可以取到多個對象get方法取不到對象的話就會報錯,而filter方法則相反,它是返回一個空列表


參考博客:https://blog.51cto.com/2096101/2167753

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章