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

 更新时间:2019年06月27日 11:16:27   作者:轻舞肥羊  
这篇文章主要介绍了Django框架orM与自定义SQL语句混合事务控制操作,结合实例形式分析了同一个方法里面既有ORM又有自定义SQL 语句的情况下事务控制相关操作技巧,需要的朋友可以参考下

本文实例讲述了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正则表达式使用经典实例

    Python正则表达式使用经典实例

    本文给大家总结了17种python正则表达式使用经典实例,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-06-06
  • Matplotlib.pyplot 三维绘图的实现示例

    Matplotlib.pyplot 三维绘图的实现示例

    这篇文章主要介绍了Matplotlib.pyplot 三维绘图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 人工智能学习Pytorch数据集分割及动量示例详解

    人工智能学习Pytorch数据集分割及动量示例详解

    这篇文章主要为大家介绍了人工智能学习Pytorch数据集分割及动量示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 自己搭建resnet18网络并加载torchvision自带权重的操作

    自己搭建resnet18网络并加载torchvision自带权重的操作

    这篇文章主要介绍了自己搭建resnet18网络并加载torchvision自带权重的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python中为main方法传参问题

    python中为main方法传参问题

    这篇文章主要介绍了python中为main方法传参问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python操作Word批量生成合同的实现示例

    Python操作Word批量生成合同的实现示例

    这篇文章主要介绍了Python操作Word批量生成合同的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python正则表达式之re.match()与re.search()的用法及区别

    python正则表达式之re.match()与re.search()的用法及区别

    本文主要介绍了python正则表达式之re.match()与re.search()的用法及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • python创建多个logging日志文件的方法实现

    python创建多个logging日志文件的方法实现

    本文主要介绍了python创建多个logging日志文件的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python用K-means聚类算法进行客户分群的实现

    Python用K-means聚类算法进行客户分群的实现

    这篇文章主要介绍了Python用K-means聚类算法进行客户分群的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python数据分析的八种处理缺失值方法详解

    Python数据分析的八种处理缺失值方法详解

    缺失值可能是数据科学中最不受欢迎的值,然而,它们总是在身边。忽略缺失值也是不合理的,因此我们需要找到有效且适当地处理它们的方法
    2021-11-11

最新评论