当前位置: 首页 > news >正文

django ORM model update常规用法

Django ORM(对象关系映射)提供了一种强大而直观的方式,通过Python类和方法与数据库交互。在Django模型中更新记录是一个常见的任务,可以通过多种方式完成。以下是一些常见的更新记录的方法:

1. 更新单条记录

使用 save() 方法

最直接的方法是先获取记录,修改其属性,然后调用 save() 方法保存。

from myapp.models import MyModel# 获取需要更新的记录
record = MyModel.objects.get(id=1)# 修改字段值
record.field_name = '新值'
record.other_field = 123# 保存更改
record.save()
使用 update() 方法

如果不想先获取记录,可以直接使用 update() 方法更新一个或多个字段。

from myapp.models import MyModel# 直接更新记录
MyModel.objects.filter(id=1).update(field_name='新值', other_field=123)

2. 更新多条记录

使用 update() 方法

要一次性更新多条记录,可以对查询集使用 update() 方法。

from myapp.models import MyModel# 更新所有匹配条件的记录
MyModel.objects.filter(status='pending').update(status='approved')

3. 使用表达式进行更新

Django允许使用数据库表达式进行更复杂的更新。

from django.db.models import F
from myapp.models import MyModel# 将所有匹配记录的字段值加1
MyModel.objects.filter(status='approved').update(count=F('count') + 1)

4. 批量更新

出于性能考虑,可能需要批量更新多条记录。Django提供了 bulk_update() 方法。

from myapp.models import MyModel# 获取所有需要更新的记录
records = MyModel.objects.filter(status='pending')# 在Python中更新记录
for record in records:record.status = 'approved'# 一次性保存所有更改
MyModel.objects.bulk_update(records, ['status'])

5. 条件更新

Django ORM支持使用 CaseWhen 进行条件更新。

from django.db.models import Case, When, Value
from myapp.models import MyModel# 条件更新记录
MyModel.objects.update(status=Case(When(status='pending', then=Value('approved')),When(status='rejected', then=Value('pending')),default=Value('unknown'))
)

示例:综合运用

假设我们有一个 Book 模型,我们想更新特定 id 的书的 price,并批量更新所有缺货书籍的 status

from django.db import modelsclass Book(models.Model):title = models.CharField(max_length=100)author = models.CharField(max_length=100)price = models.DecimalField(max_digits=5, decimal_places=2)status = models.CharField(max_length=20)stock = models.IntegerField()# 更新单条记录
book = Book.objects.get(id=1)
book.price = 19.99
book.save()# 批量更新记录
books_out_of_stock = Book.objects.filter(stock=0)
for book in books_out_of_stock:book.status = 'out of stock'
Book.objects.bulk_update(books_out_of_stock, ['status'])

Django ORM中常见的记录更新方法。根据具体的使用场景,可以选择最适合的方法,无论是更新单条记录、多条记录,还是进行批量更新。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java面试题:java三大特性多态又是如何实现的
  • 作文笔记11 推荐一本书
  • 磁力狗ciligou,磁力链接使用步骤
  • Java--Math类和Random类
  • 【设计模式】面向对象与UML
  • uni-app加持下的Vue开发:效率与功能的双赢
  • requests库的常用方法
  • 数据结构--第七章--树和二叉树
  • 调研管理系统的设计
  • odoo15升级odoo16遇到的问题及解决过程
  • 关于fedora中的wheel组
  • spring boot使用自定义注解做AOP
  • 短剧系统开发步骤需求设计方案逻辑
  • mosquitto工具使用
  • 如何提高逻辑性?(小妙招)
  • ----------
  • Angularjs之国际化
  • C# 免费离线人脸识别 2.0 Demo
  • golang 发送GET和POST示例
  • HTML中设置input等文本框为不可操作
  • java正则表式的使用
  • Markdown 语法简单说明
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 回流、重绘及其优化
  • 前端自动化解决方案
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 微信开源mars源码分析1—上层samples分析
  • 译自由幺半群
  • 用element的upload组件实现多图片上传和压缩
  • 智能合约开发环境搭建及Hello World合约
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​TypeScript都不会用,也敢说会前端?
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #pragma pack(1)
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1)Hilt的基本概念和使用
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (arch)linux 转换文件编码格式
  • (多级缓存)多级缓存
  • (二) 初入MySQL 【数据库管理】
  • (二)windows配置JDK环境
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (算法)大数的进制转换
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Micro Framework 4.2 beta 源码探析
  • .net 连接达梦数据库开发环境部署
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • @angular/cli项目构建--http(2)
  • @GetMapping和@RequestMapping的区别