Django中values()和values_list()

问道编程發表於2024-03-30

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不需要例項化列表中的所有物件,只返回資料庫值。

相關文章