假设我有一些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语句?
答案 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()