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 models

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

相关推荐

  1. mybatisPlus 常见

    2024-06-07 19:32:07       31 阅读
  2. [scala] 列表常见

    2024-06-07 19:32:07       37 阅读
  3. 一些常用

    2024-06-07 19:32:07       26 阅读
  4. BOM 常见对话框

    2024-06-07 19:32:07       9 阅读
  5. Python中锁的常见

    2024-06-07 19:32:07       40 阅读

最近更新

  1. 数据库的优点和缺点分别是什么

    2024-06-07 19:32:07       0 阅读
  2. SQL语句分类

    2024-06-07 19:32:07       0 阅读
  3. vue安装总是失败原因剖析

    2024-06-07 19:32:07       0 阅读
  4. 使用Spring Cloud构建微服务架构下的淘客返利系统

    2024-06-07 19:32:07       1 阅读

热门阅读

  1. Python做Web:深度剖析与多维评价

    2024-06-07 19:32:07       11 阅读
  2. amis源码 onEvent事件动作 和 Action行为按钮解析

    2024-06-07 19:32:07       12 阅读
  3. 1348:【例4-9】城市公交网建设问题

    2024-06-07 19:32:07       9 阅读
  4. Ant-Design-Vue动态表头并填充数据

    2024-06-07 19:32:07       10 阅读
  5. System-Verilog

    2024-06-07 19:32:07       9 阅读
  6. 重新学习stm32(序)stm32简介

    2024-06-07 19:32:07       9 阅读
  7. Redux 入门+面试题

    2024-06-07 19:32:07       10 阅读
  8. openfeign服务相互调用碰到问题总结

    2024-06-07 19:32:07       10 阅读
  9. python生成器

    2024-06-07 19:32:07       9 阅读
  10. Windows11+Ubuntu24.04双系统安装及配置

    2024-06-07 19:32:07       11 阅读
  11. Ubuntu 22.04 搭建 KubeSphere 3.4.1 集群

    2024-06-07 19:32:07       10 阅读
  12. 云原生架构相关技术_2.云原生微服务

    2024-06-07 19:32:07       11 阅读
  13. 深入理解 MySQL 中的 SQL_NO_CACHE 关键字

    2024-06-07 19:32:07       13 阅读
  14. Ajax入门

    2024-06-07 19:32:07       14 阅读