我有两个进程运行 Django 代码库,由于各种原因,一个进程将更新一个对象,如下所示:
myObj.aField = "updated"
myObj.save()
稍后,另一个进程尝试按如下方式读取该对象:
def getObj(xxx):
objs = TheModel.objects.filter(xyz=xxx)
for obj in objs:
print obj.aField
从第二个进程读取值时,我不会看到更新的值,而是看到旧值。第二次运行该函数时,我确实看到了变化。
我注意到,如果从第二个过程(一个读数),我改变函数如下,我得到更新的值:
@transaction.commit_manually
def getObj(xxx):
objs = TheModel.objects.filter(xyz=xxx)
transaction.commit()
for obj in objs:
print obj.aField
添加装饰器@transaction.commit_manually
和调用transaction.commit()
正下方的行后filter()
,我确实从字段中获取了更新的值(从其他进程中保存。)
有什么理由需要这样做吗?transaction.commit()
在实际上根本不更新模型的功能上使用的影响/潜在问题是什么?我不确定它为什么起作用,如果它有意义,所以希望其他人遇到这个问题。
谢谢,