2015-05-26 61 views
0

我有一個數據庫表中,所謂的「標籤」是這樣的:Django的插入查詢結果到數據庫

ID | Name | Uses 
------------------------ 
    1 | Python | 0 
    2 | Java | 0 
    3 | C++ | 0 
    4 | Ruby | 0 

我還有一個表,「TagMap」,即用來把這些標籤與用戶映射,誰可以每個都有很多標籤。

我想查詢TagMap表以找出每個標籤已被使用的總次數,然後將其保存到該標籤的'Uses'列中。例如,如果5個用戶具有標籤「Python」,那麼我希望'用戶'列讀取'5'而不是'0'。

我已經在網上看了解如何做到這一點,但我的主要問題是,我不知道我應該搜索什麼,任何幫助將不勝感激。

回答

0

Django將讓您查詢您的TagMap模型(我假設你在這裏有一個Django的模型)來獲取相應的定標籤的條目數。

然後,您將能夠在單獨調用ORM時更新使用計數器。

使用原始SQL查詢,您可以在單個查詢中執行這兩個查詢,但這不是Django ORM允許的(另請參閱Django subquery in insert)。

根據您的併發要求,如果您想堅持使用ORM進行這種非規範化,則在第一個查詢中使用select_for_update可能有助於實現隔離。

0
tag = Tags.objects.get(Name='Python') 
count = TagMap.objects.filter(tag=tag).count() 
tag.Uses = count 
tag.save() 
+1

我不會建議沒有免責聲明的代碼在可能的副作用(例如併發問題)上。 – Weier