簡體   English   中英

Django objects.filter()values_list()vs __inin查詢的python list comprehension

[英]Django objects.filter() values_list() vs python list comprehension for __in query

我有一個Django查詢集過濾的怪癖(?):

ipdb> MagazineIssue.objects.filter(id__in=l_magazines.values_list('id'))
Out[0]: []

要么

ipdb> MagazineIssue.objects.filter(id__in=[l_magazine.id for l_magazine in l_magazines])
Out[0]: [<MagazineIssue: Architecture Australia, Jan 1995 (#1)>]

ipdb> l_magazines.values_list('id')
Out[0]: [(1,)]
ipdb> [l_magazine.id for l_magazine in l_magazines]
Out[0]: [1]

那么,如何使用values_list()? (生產):

[1]

或是python列表理解'走的路'?

嘗試l_magazines.values_list('id', flat=True) 這將返回一個id列表,而不是單個id元組列表。

需要注意的一點是,值/ values_list與列表推導的行為存在差異:

  • values / values_list將產生存儲在字段中的實際值,即只是id(不是整個對象)
  • 如果值是外鍵,並且您在模型中設置了適當的關系,則列表推導將為您提供外鍵引用的對象。

選擇錯誤的數據庫會導致不必要的數據庫命中,或者導致不必要的操作,具體取決於您嘗試執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM