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基础教程之获取本机ip数据包示例
Feb 10 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
在Python的Django框架上部署ORM库的教程
Apr 20 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
python僵尸进程产生的原因
Jul 21 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
详解Python的三种可变参数
May 08 Python
python实现126邮箱发送邮件
May 20 Python
基于Python爬取京东双十一商品价格曲线
Oct 23 Python
Python内置的数据类型及使用方法
Apr 13 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
php str_pad 函数用法简介
2009/07/11 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
python使用turtle库绘制树
2018/06/25 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
一份创业计划书范文
2014/02/08 职场文书
咖啡店创业计划书
2014/08/15 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
师范生小学见习总结
2015/06/23 职场文书
校园之声广播稿
2015/08/18 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技