如何使用 Django 进行“批量更新"?

编程入门 行业动态 更新时间:2024-10-27 22:25:00
本文介绍了如何使用 Django 进行“批量更新"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想用 Django 更新一个表 - 在原始 SQL 中是这样的:

I'd like to update a table with Django - something like this in raw SQL:

update tbl_name set name = 'foo' where name = 'bar'

我的第一个结果是这样的 - 但这很糟糕,不是吗?

My first result is something like this - but that's nasty, isn't it?

list = ModelClass.objects.filter(name = 'bar') for obj in list: obj.name = 'foo' obj.save()

有没有更优雅的方式?

推荐答案

更新:

Django 2.2 版本现在有一个 bulk_update.

参考下面的django文档部分

Refer to the following django documentation section

一次更新多个对象

简而言之,您应该可以使用:

In short you should be able to use:

ModelClass.objects.filter(name='bar').update(name="foo")

您还可以使用 F 对象来执行诸如增加行之类的操作:

You can also use F objects to do things like incrementing rows:

from django.db.models import F Entry.objects.all().update(n_pingbacks=F('n_pingbacks') + 1)

请参阅文档.

但是,请注意:

  • 这不会使用 ModelClass.save 方法(所以如果你有一些逻辑,它不会被触发).
  • 不会发出 django 信号.
  • 您不能对切片的 QuerySet 执行 .update(),它必须在原始 QuerySet 上执行,因此您需要依靠 .filter()code> 和 .exclude() 方法.
  • This won't use ModelClass.save method (so if you have some logic inside it won't be triggered).
  • No django signals will be emitted.
  • You can't perform an .update() on a sliced QuerySet, it must be on an original QuerySet so you'll need to lean on the .filter() and .exclude() methods.

更多推荐

如何使用 Django 进行“批量更新"?

本文发布于:2023-10-23 22:23:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1522170.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   批量   Django   quot

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!