仅在需要更新时才更新django模型中的字段

时间:2014-02-27 20:25:53

标签: python mysql django

假设我有一些django模型并且我正在更新实例

def modify_thing(id, new_blah):
    mything = MyModel.objects.get(pk=id)
    mything.blah = new_blah
    mything.save()

我的问题是,如果碰巧已经是mything.blah == new_blah的情况,django是否知道这一点并且不再费心去保存这个[非]修改?或者它会一直进入db(在我的情况下是MySQL)并更新数据吗?

如果我想避免不必要的写作,那么执行以下操作是否有意义:

if mything.blah != new_blah:
    mything.blah = new_blah
    mything.save()

鉴于必须首先从db中读取记录才能进行比较?这种结构是否有任何效率 - 如果是这样的话,是否有一种不那么丑陋的方式比使用python中的if语句?

2 个答案:

答案 0 :(得分:0)

您可以使用Django Signals确保您刚刚发布的代码不会到数据库。看看pre_save,这就是你正在寻找的信号。

答案 1 :(得分:0)

鉴于django没有缓存值,DB的访问是不可避免的,你必须获取它来比较值。而且我们肯定没有那么难看的方法。你可以这样做

if mything.blah is new_blah:
   #Do nothing
else:
     mything.blah = new_blah
     mything.blah.save()