Django框架orM与自定义SQL语句混合事务控制操作


Posted in Python onJune 27, 2019

本文实例讲述了Django框架orM与自定义SQL语句混合事务控制操作。分享给大家供大家参考,具体如下:

用单纯的ORM 或者单纯的自定义SQL语句,都比较好控制事务。在前面的一篇文章中已经讲过Django事务小结 ,但里面没有提到在同一个方法里面既有ORM 又有 自定义SQL 语句的情况。

如果是单纯的ORM ,可以这样做,假设已经定义好model, User,Category。

from django.db import transaction
...
@commit_on_success
def save_test(request):
  user=User(name="aaa",age=30)
  user.save()
  cat=Category(id=2,name="cat001")
  cat.save()
  .......

只有在程序成功执行,没错时,才会commit. 比如如果cat 保存出错,那么user 就会回滚。

如果是单纯的自定义SQL语句,可以通过如下方式实现

from django.db import connection, transaction
...
def batch_execsql(sqlarray):
  print sqlarray
  cursor = connection.cursor()
  ret=""
  try:
    for sql in sqlarray:
      cursor.execute(sql)
    transaction.commit_unless_managed()
  except Exception,e:
    ret=str(e)
  cursor.close()
  return ret
sqlarray=[]
sqlarray.append("insert into table .......")
sqlarray.append("update table set.......")
ret=batch_execsql(sqlarray)

用这种方式,实现自定义SQL语句的事务,只要任何一条语句出错,就会回滚.

那么,如果ORM 与 自定义SQL 语句混合如何做呢,我在项目中结合了上面两种方式。比如按如下的方式

@commit_on_success
def save_company_callinfo(request):
  response=HttpResponse()
  try:
     #==orm 保存部分======
     ....
     model1.save()
     ....
     model2.save()
     ...
     #==自定义SQL 部分====
     sqlarray=[]
     sqlarray.append("insert into table .......")
     sqlarray.append("update table set.......")
     ret=batch_execsql(sqlarray)
     if len(ret)>0:
       transaction.rollback()
       response.write('{"status":"no","error":"%s"}' % ('add call information error',))
     else:
       response.write('{"status":"no","error":"%s"}' % ('',))
  except Exception,e:
     response.write('{"status":"no","error":"%s"}' % (str(e),))
  return response

这上面的过程可以自己修改成自己需要的,我用的是AJAX方式,因为我自己需要,但总体上ORM 与自定义SQL混合事务,就可以这么控制了。

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Pytorch入门之mnist分类实例
Apr 14 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
解决yum对python依赖版本问题
Jul 05 Python
Python笔试面试题小结
Sep 07 Python
python SocketServer源码深入解读
Sep 17 Python
python argparser的具体使用
Nov 10 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python如何在循环内使用list.remove()
Jun 01 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 #Python
Python自定义一个异常类的方法
Jun 27 #Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 #Python
python pytest进阶之conftest.py详解
Jun 27 #Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 #Python
python pytest进阶之fixture详解
Jun 27 #Python
解决pycharm 远程调试 上传 helpers 卡住的问题
Jun 27 #Python
You might like
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
webpack配置sass模块的加载的方法
2017/07/30 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
elementUI多选框反选的实现代码
2019/04/03 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
Python编写电话薄实现增删改查功能
2016/05/07 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
解决Mac下使用python的坑
2019/08/13 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
土木工程师岗位职责
2013/11/24 职场文书
活动策划邀请函
2014/02/06 职场文书
销售主管竞聘书
2014/03/31 职场文书
教师暑期培训感言
2014/08/15 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python