Django中update和save()同时作用仅仅保存一次的问题

数据更新操作,对单条记录,可以使用save或者是update两种方式。

save() 默认保存后会看到sql语句中更新了所有字段,而save的值是之前获取时候的字段值,是缓存下来的,并不一定最新,可能中途其他地方被更新过(在Django工程下的settings.py下将log设置为DEBUG,即可查看save和update分别执行了哪些SQL语句)

如果两个同时用,或者不同地方,但可能会同时更新的话会几率性出现更新了,但是数据库中值并没有改变。其实是update更新过后,正好save了过时的字段值,导致看起来没有更新。 django 1.5之后save可以加入参数只更新指定字段。

test.position = 441
test.save(update_fields=['position'])

性能对比

从SQL的执行情况来看,使用upate是要优于save方式的; 从使用情境上看,update更加适用于批量数据更新,而save则更适合当然也只适合做单条记录的数据更新操作了。

save()是奖当期pthon上下文的model对象数据保存到数据库,如果存在循环保存的场景,可能会出现最后只保存了最后的一次save()数据,原因是尽管循环调用了save()方法,每次保存的内容都是一样的,因为python上下文的model数据没有改变,解决方法是从新从数据库获取最新的model对象,让后调用对象的save()方法

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2020年5月8日 14:45