values()
1、不帶引數,返回所有屬性的鍵值對,比如使用filter時,會返回一個列表,列表中每一項是一個字典
>>> Blog.objects.values() [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.filter(name__startswith='Beatles').values() [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
2、帶引數,返回指定的鍵值對
>>> Entry.objects.values('blog') [{'blog': 1}, ...]
注意:
當values() 與distinct() 一起使用時,注意排序可能影響最終的結果
如果values() 子句位於extra() 呼叫之後,extra() 中的select 引數定義的欄位必須顯式包含在values() 呼叫中。values() 呼叫後面的extra() 呼叫將忽略選擇的額外的欄位
在values() 之後呼叫only() 和defer() 不太合理,所以將引發一個NotImplementedError
外來鍵:會返回對應的主鍵
多對多:會將資料集合成本放大,慎用
values_list()
1、不帶引數,或者帶多個引數,返回元組
>>> Entry.objects.values_list('id', 'headline') [(1, 'First entry'), ...]
2、只帶一個引數,並且使用了flat=True引數,返回列表
>>> Entry.objects.values_list('id', flat=True).order_by('id') [1, 2, 3, ...]
最後:差異巨大,values_list速度更快。flat = true使得它更快,因為python不需要例項化列表中的所有物件,只返回資料庫值。