最近在項目中發現了這樣的一個坑,那就是我們的需求是不能添加一個相同的對象到數據庫中,就通過某些字段的值組合成唯一值到數據庫中去查找數據,如果沒有找到對象,那就創建一條新的數據庫記錄,而剛好django又提供了這種方法,那就是get_or_create。可是在測試的時候發現會加入相同的對象。
而解決方法就是:其實我們可以從數據庫級別來使這幾個字段組合唯一,這樣如果有重復的數據就會加不進去。
class Meta:
unique_together = (("xxx", "xxxx"),)
先到數據庫中找,找不到就創建。
但是為什么使用get_or_create方法就會可能失敗呢?
因為get_or_create並不是線程安全的,在多線程得情況下,可能會創建相同數據的字段。
