數據更新操作,對單條記錄,可以使用save或者是update兩種方式。
save() 默認保存后會看到sql語句中更新了所有字段,而save的值是之前獲取時候的字段值,是緩存下來的,並不一定最新,可能中途其他地方被更新過(在Django工程下的settings.py下將log設置為DEBUG,即可查看save和update分別執行了哪些SQL語句)
UPDATE pxb_sx2_test SET user_id = 335, catalog_id = 12558, level_id = 4, level_status = 0, position = 440, type = 2, add_time = '2016-09-14 17:44:07', update_time = '2016-09-14 17:53:17.077520' WHERE pxb_sx2_test.id = 175;
update 更新指定字段
UPDATE pxb_sx2_test SET position = 441 WHERE pxb_sx2_test.id = 175;
如果兩個同時用,或者不同地方,但可能會同時更新的話會幾率性出現更新了,但是數據庫中值並沒有改變。其實是update更新過后,正好save了過時的字段值,導致看起來沒有更新。 django 1.5之后save可以加入參數只更新指定字段。
test.position = 441
test.save(update_fields=['position'])
性能對比
- 從SQL的執行情況來看,使用upate是要優於save方式的;
- 從使用情境上看,update更加適用於批量數據更新,而save則更適合當然也只適合做單條記錄的數據更新操作了。