Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >django queryset.update上的原子事务(**kwargs)

django queryset.update上的原子事务(**kwargs)
EN

Stack Overflow用户
提问于 2016-08-30 23:01:14
回答 1查看 3.5K关注 0票数 3

Djangoqueryset.update方法似乎在transaction.atomic上下文管理器下执行。在update期间,我什么时候需要在代码中显式地执行它?或者,这样做有什么好处,或者不执行它会有什么问题?

代码

代码语言:javascript
运行
AI代码解释
复制
try:
    queryset = Model.objects.filter(a=1)
    if queryset.count():
        with transaction.atomic():
            queryset.update(a=2) # queryset will [] after this.
            for item in queryset: 
                item.emit_event('Updated')
except:
    logger.info('Exception')

我的问题是,我真的需要transaction.atomic():在这里吗?

其次,在.update之后,我的queryset变得空,因为它是一个过滤的queryset。如何在我的情况下保留这些值,因为我想在各个对象上发出一个事件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 23:25:48

First

As 文档状态

原子性是数据库事务的定义属性。原子允许我们创建一个代码块,在其中保证数据库的原子性。如果代码块已成功完成,则将更改提交到数据库。如果有异常,则回滚更改。

在您的示例中,如果atomic正在执行某些操作,则需要emit_event,并且只有在所有emit_event函数调用和queryset.update都成功的情况下,才需要执行此更新。但是,如果emit_event的状态不影响更新的业务逻辑,那么这里的atomic将是多余的,因为正如您自己所说的,update有内部atomic

第二

Queryset很懒。这意味着查询集的评估将在迭代时完成。所以你需要做这样的事。回答最新评论

代码语言:javascript
运行
AI代码解释
复制
try:
    queryset = Model.objects.filter(a=1)
    item_ids = list(queryset.values_list('id', flat=True)) # store ids for later
    if item_ids: # optimzing here instead of queryset.count() so there won't be hit to DB
        with transaction.atomic():
            queryset.update(a=2) # queryset will [] after this.
            for item in Model.objects.filter(id__in=item_ids):  # <- new queryset which gets only updated objects
                item.emit_event('Updated')
except:
    logger.info('Exception')

请看,我们在迭代时创建新的queryset以获得更新的项。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39242799

复制
相关文章
如何查看Django ORM执行的SQL语句
Django ORM对数据库操作的封装相当完善,日常大部分数据库操作都可以通过ORM实现。
BigYoung小站
2020/05/06
1.9K0
如何修改django的app在admin中显示的名称
在django的开发中,很多时候我们希望app在admin中显示成我们想要的中文名,而不是显示默认的app_label名称。 比如我们有一个blog应用,在我们的blog app目录下面,默认会生成一个apps.py文件,类似:
小海怪的互联网
2019/09/25
3.5K0
如何修改django的app在admin中显示的名称
网站如何加入显示运行时间
世间万物皆苦,你明目张胆的偏爱就是救赎。 网站加入运行时间精确到秒 把下面代码加到你需要的地方,很简单的,我还是比较喜欢这样的个性代码的 <span id="runtime_span"></span> <script type="text/javascript"> function show_runtime() {window.setTimeout("show_runtime()",1000); X=new Date("10/16/2017 5:22:00"); Y=new Date(); T=(Y.
白黎
2023/03/16
7550
网站如何加入显示运行时间
Django admin显示中文
在定义 Model 类的时候,在 Meta 里面显式指定 verbose_name 和 verbose_name_plural即可指定该模型在 Admin 里面显示的别名。
用户2936342
2018/08/27
1.2K0
django显示当前时间
直接用HttpResponse返回一个html标签不太好,如果代码比较多,就不合适了。
py3study
2018/08/02
3.1K0
如何修改django的app在admin后台中显示的名称,也就是显示为中文
第一步 在以上的文件里面写你想要展示的中文 第二部 将那个方法在init文件里面导入,重新启动项目就可以了
一写代码就开心
2020/12/01
1.4K0
如何修改django的app在admin后台中显示的名称,也就是显示为中文
Spring Boot 如何监控 SQL 运行情况?
今天想和大家聊一聊 Druid 中的监控功能。 Druid 数据库连接池相信很多小伙伴都用过,个人感觉 Druid 是阿里比较成功的开源项目了,不像 Fastjson 那么多槽点,Druid 各方面一直都比较出色,功能齐全,使用也方便,基本的用法就不说了,今天我们来看看 Druid 中的监控功能。 1. 准备工作 首先我们来创建一个 Spring Boot 工程,引入 MyBatis 等,如下: 选一下 MyBatis 和 MySQL 驱动,做一个简单的测试案例。 先来连接一下数据库: spring.da
江南一点雨
2022/03/04
6130
SpringBoot 如何统计、监控 SQL运行情况?
上述配置文件的参数可以在 com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties 和 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties中找到;
鱼找水需要时间
2023/02/16
1.6K0
SpringBoot 如何统计、监控 SQL运行情况?
[Centos7.2]Django挂载后台运行
在Linux环境中运行这个命令,倘若是通过ssh连接,在连接关闭后Dango也会跟着中断!
贰叁壹小窝
2020/07/22
1.2K0
显示mybatis的执行的sql
让mybatis也像hibernate.show_sql一样显示执行sql
似水的流年
2018/01/14
6850
显示mybatis的执行的sql
显示mybatis的执行sql 让mybatis也像hibernate.show_sql一样显示执行sql 在log4j.properties 添加 log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console
似水的流年
2018/01/18
9020
显示mybatis的执行的sql
显示mybatis的执行sql 让mybatis也像hibernate.show_sql一样显示执行sql 在log4j.properties 添加
似水的流年
2019/12/08
8030
如何让django的model名和应用名显示为中文
如何修改django.admin中一个应用的名称:复制下面的代码放入应用目录下的init.py中即可,通过修改 verbose_name = u’中文名称’
菲宇
2022/12/21
8460
docker 运行Django项目
已经写好了一个Django项目,需要将这个项目用docker封装一个镜像,使用k8s发布!
py3study
2020/02/24
1.3K0
Django 中图片的上传及显示
在 Django 中,上传文件不同于普通服务器的上传方法,在普通服务器中只需要使用一个 Controller 来控制文件的上传即可完成,但是在 Django 中,则需要额外使用数据库资源来存储文件。本文将说明如何使用 Django 接收、保存并且返回图片。
Kindem
2022/08/12
3.4K0
如何杀掉pg数据库正在运行的sql
我们在生产环境可能经常遇到长sql,长sql对数据库的影响还是挺大的,不仅可能对主机资源消耗较大,还可能会阻塞其他sql的正常执行,所以对于长sql我们要尤其注意。一般生产环境都会配置长sql告警,可以根据业务情况调整告警阈值。
数据库架构之美
2019/12/18
4.1K0
Mybatis显示SQL语句
众所周知,hibernate可以通过配置show_sql在控制台显示sql语句,Mybatis可不可以呢?当然是可以的,将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试:
河岸飞流
2019/08/09
2K0
pycharm怎么运行django项目_django怎么用
 原文转载自:http://www.cnblogs.com/Leo_wl/p/5824541.html
全栈程序员站长
2022/09/27
2.4K0
pycharm怎么运行django项目_django怎么用
点击加载更多

相似问题

ionic:添加自己的cordova插件

31

添加oneSignal插件cordova - Ionic 2

10

Ionic Cordova插件

118

Cordova诊断插件不工作

12

在Ionic 2中添加一个cordova插件

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档