Django-事务和锁
2024-09-07 20:33:02
一、事务
1、全局开启事务
在Web应用中,常用的事务处理方式是将每个请求都包裹在一个事务中。这个功能使用起来非常简单,你只需要将它的配置项ATOMIC_REQUESTS设置为True。
它是这样工作的:当有请求过来时,Django会在调用视图方法前开启一个事务。如果请求却正确处理并正确返回了结果,Django就会提交该事务。否则,Django会回滚该事务。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mxshop',
'HOST': '127.0.0.1',
'PORT': '',
'USER': 'root',
'PASSWORD': '',
'OPTIONS': {
"init_command": "SET default_storage_engine='INNODB'",
#'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", #配置开启严格sql模式 }
"ATOMIC_REQUESTS": True, #全局开启事务,绑定的是http请求响应整个过程
# "AUTOCOMMIT":False, #全局取消自动提交,慎用
},
'other':{
'ENGINE': 'django.db.backends.mysql',
......
} #还可以配置其他数据库
}
2、局部使用事务
原子性是数据库事务的一个属性。使用atomic,我们就可以创建一个具备原子性的代码块。一旦代码块正常运行完毕,所有的修改会被提交到数据库。反之,如果有异常,更改会被回滚。
被atomic管理起来的代码块还可以内嵌到方法中。这样的话,即便内部代码块正常运行,如果外部代码块抛出异常的话,它也没有办法把它的修改提交到数据库中。
用法1:给函数做装饰器来使用
from django.db import transaction @transaction.atomic
def viewfunc(request):
# This code executes inside a transaction.
do_stuff()
用法2:作为上下文管理器来使用,其实就是设置事务的保存点
from django.db import transaction def viewfunc(request):
# This code executes in autocommit mode (Django's default).
do_stuff() with transaction.atomic(): #保存点
# This code executes inside a transaction.
do_more_stuff() do_other_stuff()
二、锁
select_for_update()
select * from t1 for update
models.T1.objects.select_for_update().filter(id=1) #排他锁(互斥锁) 读写不行写也不行
三、MySQL中加锁和事务
MySQL默认自动commit,
验证锁,先把自动commit取消;
事务:
开启一个事务,必须我们手动commit,这个事务才会结束:
最新文章
- 萌新笔记——linux下查看内存的使用情况
- PPT演示快捷键
- Python学习路程day18
- 【BZOJ2793】【数学】[Poi2012]Vouchers
- linux中轻松使用backspace和上下按键
- maven mirror
- underscorejs-where学习
- java读取配置文件的几种方法
- pprint模块解析
- Android Activity和Intent机制学习笔记
- strus2 action重复执行问题
- ORM映射设计思想
- SecureCRT + Tmux 分屏 高效开发
- Toggle Slow Animations
- Mysql 查看连接数,状态 最大并发数(赞)
- logging模块、sys模块、shelve模块
- /dev/null 2>;&;1 什么意思
- MySQL库中表名忽略大小写设置的影响
- angular、jquery、vue 的区别与联系
- PHP中CGI,FastCGI,PHP-CGI与PHP-FPM对比
热门文章
- Vasya's Function CodeForces - 837E (gcd)
- codeblocks 使用汇总
- jQuery 手写菜单(ing)
- 微信小程序转发事件
- elementui-插槽
- 行内块和文字垂直对齐vertical-agign
- django 权限控制精简版
- Unexpected token '...'. Expected a property name.
- 三台服务器的时间同步-Linux
- 面向对象(OPP)的三大特征之 继承