Django跳坑:objects.all()、objects.get()與objects.filter()之間的區別

1、三者之間的區別

  • all返回的是QuerySet對象,程序並沒有真的在數據庫中執行SQL語句查詢數據,但支持迭代,使用for循環可以獲取數據。
  • get返回的是Model對象,類型爲列表,說明使用get方法會直接執行sql語句獲取數據
  • filter和all類似,但支持更強大的查詢功能
allfilter和get得到的數據返回類型是不一樣的

all、filter返回數據類型是QuerySet、get返回數據類型是models
在這裏插入圖片描述
在這裏插入圖片描述

2、獲取數據

models類型:.values()報錯
在這裏插入圖片描述
在這裏插入圖片描述
QuerySet類型:.values()輸出數據
在這裏插入圖片描述
在這裏插入圖片描述

輸出數據時我們發現:models類型是沒有values()方法的

2.1、取單個數據

解析QuerySet的數據類型:簡單的理解QuerySet就是一個列表裏面包含了n個字典,

[{ },{ },{ },…]

所以取值時QuerySet可以像列表一樣取索引、切片等操作

QuerySet類型取數據

food1_id = food1[0].id
food1_id = food1[0]["id"]
food1_id = food1[0].get("id")
models類型取數據

food_id = food.id

3、序列化

參考教程源址:http://www.yihaomen.com/article/python/279.htm

3.1、QuerySet序列化

food1_list = list(food1.values())

3.2、models序列化

models的序列化相對比較麻煩,可以在使用objects.get()的時候直接改用objects.filter()

models.py裏面

class Food(models.Model):
    name=models.CharField(max_length=150,blank=False)  
    def toJSON(self):
        import json
        return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))

使用models時

food=Food.objects.get(id=1)    
print food.toJSON()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章