美文网首页大数据 爬虫Python AI Sql小猿圈-IT自学人的小圈子
小猿圈Python开发之Django框架orM与自定义SQL语句

小猿圈Python开发之Django框架orM与自定义SQL语句

作者: f673630174f6 | 来源:发表于2019-06-27 15:45 被阅读0次

学习Python是一件很快乐是事情,不仅可以当以后的工作还可以当为兴趣爱好,小猿圈Python讲师今天分享Django框架orM与自定义SQL语句混合事务,希望对于学习Python的你有所帮助。结合实例形式分析了同一个方法里面既有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混合事务,就可以这么控制了。

以上就是小猿圈Python讲师对于Django框架orM与自定义SQL语句混合事务的介绍,相信通过以上的分享,你对于学习Python开发也有了很深刻的了解Python交流群:874680195,如果还有哪些不懂的可以到小猿圈官网去寻找答案,里面有最新最全面的视频。

相关文章

网友评论

    本文标题:小猿圈Python开发之Django框架orM与自定义SQL语句

    本文链接:https://www.haomeiwen.com/subject/pwercctx.html