我正在尋找一種可靠的方式來確保對於給定的Django模型實例,一個特定的字段只寫入一次。確保django模型字段只寫入一次?原子性保證沒有鎖
代碼應該在使用芹菜甚至rq的視圖或任務中運行。
我想用下面的代碼片段:
from django.db import transaction
from django.utils.timezone import now
...
def perform_writeonce(object_pk):
with transaction.atomic():
instance = MyModel.objects.get(pk=object_pk)
if instance.value is None:
instance.value = 'Value written now : {}'.format(now())
instance.save()
的目標是價值應該只寫一次且僅當它的值是無。
你對這段代碼有信心嗎?還是有我錯過的東西?
我使用多個gunicorn實例和芹菜工作者與一個postgresql數據庫服務器。
我試圖避免不惜一切代價鎖定,所以任何帶有應用程序鎖的解決方案都不好。
感謝您的任何幫助。
我有信心。因爲事務依賴於db層而不是應用層。 – itzMEonTV