我正在寻找一种可靠的方式来确保对于给定的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