django使用F方法更新一个对象多个对象字段的实现


Posted in Python onMarch 28, 2020

通常情况下我们在更新数据时需要先从数据库里将原数据取出后放在内存里,然后编辑某些字段或属性,最后提交更新数据库。使用F方法则可以帮助我们避免将所有数据先载入内存,而是直接生成SQL语句更新数据库。

假如我们需要对所有产品的价格涨20%,我们通常做法如下。当产品很少的时候,对网站性能没影响。但如果产品数量非常多,把它们信息全部先载入内存会造成很大性能浪费。

products = Product.objects.all()
for product in products:
  product.price *= 1.2
  product.save()

使用F方法可以解决上述问题。我们直接可以更新数据库,而不必将所有产品载入内存。

from django.db.models import F

Product.objects.update(price=F('price') * 1.2)

我们也可以使用F方法更新单个对象的字段,如下所示:

product = Product.objects.get(pk=5009)
product.price = F('price') * 1.2
product.save()

但值得注意的是当你使用F方法对某个对象字段进行更新后,需要使用refresh_from_db()方法后才能获取最新的字段信息(非常重要!)。

如下所示:

product.price = F('price') + 1
product.save()
print(product.price)      # <CombinedExpression: F(price) + Value(1)>
product.refresh_from_db()
print(product.price)      # Decimal('13.00')

补充知识:Django批量更新多个属性

有时候我们需要同时(一次性)更新某个用户的多条属性。

1. 用户model如下:

class User(models.Model):
  UID = models.CharField('员工uid', max_length=200,)
  name = models.CharField('员工名字', max_length=200,)
  mobile = models.CharField('手机号', max_length=200,)
  mail = models.EmailField(u'邮箱', max_length=200)

2. 用户的数据

user_info = {'UID': 'ADBES682BOEO',
      'name': '张三',
      'mobile': '12345678911',
      'mail': 'test@test.com'
      }

3. 新建用户

User.object.create(UID='ADBES682BOEO',name='张三',mobile='12345678911',mail='test@test.com')

这就会在数据库中新建一个张三的数据。

4. 更新数据

user_info = {'UID': 'ADBES682BOEO',
      'name': '张三2',
      'mobile': '12345678912',
      'mail': 'test2@test.com'
      }

4.1 一般的更新操作

user = User.object.get(UID='ADBES682BOEO')
user.name = user_info['name']
user.mobile = user_info['mobile']
user.mail = user_info['mail']
user.save()

4.2 批量操作

user = User.object.filter(UID='ADBES682BOEO')
user.update(**user_info)

以上这篇django使用F方法更新一个对象多个对象字段的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 字符串格式化代码
Mar 17 Python
Python采用socket模拟TCP通讯的实现方法
Nov 19 Python
用Python写冒泡排序代码
Apr 12 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
Python处理session的方法整理
Aug 29 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
Python创建临时文件和文件夹
Aug 05 Python
Python基础之tkinter图形化界面学习
Apr 29 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 #Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 #Python
使用python客户端访问impala的操作方式
Mar 28 #Python
python 安装impala包步骤
Mar 28 #Python
django 链接多个数据库 并使用原生sql实现
Mar 28 #Python
Django多数据库配置及逆向生成model教程
Mar 28 #Python
后端开发使用pycharm的技巧(推荐)
Mar 27 #Python
You might like
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
JavaScript中null与undefined分析
2009/07/25 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
Python设计实现的计算器功能完整实例
2017/08/18 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
shell程序中如何注释
2012/02/17 面试题
如何写贫困证明申请书
2014/10/29 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
千与千寻观后感
2015/06/04 职场文书
红高粱观后感
2015/06/10 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
2015迎新晚会开场白
2015/07/17 职场文书