關於django中的get_or_create方法的坑


最近在項目中發現了這樣的一個坑,那就是我們的需求是不能添加一個相同的對象到數據庫中,就通過某些字段的值組合成唯一值到數據庫中去查找數據,如果沒有找到對象,那就創建一條新的數據庫記錄,而剛好django又提供了這種方法,那就是get_or_create。可是在測試的時候發現會加入相同的對象。

而解決方法就是:其實我們可以從數據庫級別來使這幾個字段組合唯一,這樣如果有重復的數據就會加不進去。

class Meta:
unique_together = (("xxx", "xxxx"),)

 先到數據庫中找,找不到就創建。

但是為什么使用get_or_create方法就會可能失敗呢?

因為get_or_create並不是線程安全的,在多線程得情況下,可能會創建相同數據的字段。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM