Django save方法的update_fields参数

Django save方法的update_fields参数

今天遇到的是 django orm 中 save() 使用上的一些小细节,我们来直接看一下代码

position_obj.line_status = position_status
    if line_action == LineRecord.STATUS_UP:
        position_obj.is_use = True
        position_obj.parent_id = parent_id
    else:
        position_obj.is_use = False
        position_obj.parent_id = None
    position_obj.save()  

没错,这又是我第一次写的代码,领导看后说这样有一些慢,让使用 update_fields 参数改一下,当时我是满怀信心的答应,其实心里是什么的慌的,因为之前没有接触过,更没有使用过【捂脸】,查百度,查博客,查官方文档,最终算是终于学会了,我们先来看一下官方文档给的解释:


指定哪些字段保存

如果save()在关键字arguments中传递了字段名称列表 update_fields,则仅更新该列表中命名的字段。如果只想更新一个对象上的一个或几个字段,则可能需要这样做。阻止数据库中所有模型字段的更新将对性能产生一点好处。例如:

product.name = 'Name changed again'
product.save(update_fields=['name'])

update_fields参数可以是任何可迭代的包含字符串的参数。空的update_fieldsIterable将跳过保存。无值将对所有字段执行更新。

指定update_fields将强制进行更新。

保存通过延迟模型加载(only()defer())获取的模型时,只有从数据库加载的字段会被更新。实际上,update_fields在这种情况下有一个自动装置 。如果您分配或更改任何延迟的字段值,则该字段将被添加到更新的字段中。

可能不太好找,这是地址:https://docs.djangoproject.com/en/3.1/ref/models/instances/ 划到中间靠下位置


在当我们数据库的字段的数量很大的时候,如果直接 save() 确实可能会导致 sql 的执行速度变慢,还有的大佬说:如果同时操作一个 Model 对象,更新不同的字段,后保存的操作会用老的值覆盖掉早点操作的值

来看看修改后的代码

position_obj.line_status = position_status 
if line_action == LineRecord.STATUS_UP:
    position_obj.is_use = True
    position_obj.parent_id = parent_id
else:
    position_obj.is_use = False
    position_obj.parent_id = None
position_obj.save(update_fields=['is_use', 'parent_id'])
谢谢您的批阅
我是图南,我们下期见
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值