欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學(xué)堂Python培訓(xùn)之Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作

2019-06-27 13:36:05 1521瀏覽

今天千鋒扣丁學(xué)堂Python培訓(xùn)老師給大家分享一篇關(guān)于Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作的詳細(xì)介紹,結(jié)合實(shí)例形式分析了同一個(gè)方法里面既有ORM又有自定義SQL語(yǔ)句的情況下事務(wù)控制相關(guān)操作技巧。



比如用單純的ORM或者單純的自定義SQL語(yǔ)句,都比較好控制事務(wù)。在前面的一篇文章中已經(jīng)講過(guò)Django事務(wù)小結(jié),但里面沒(méi)有提到在同一個(gè)方法里面既有ORM又有自定義SQL語(yǔ)句的情況。

如果是單純的ORM,可以這樣做,假設(shè)已經(jīng)定義好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()
  .......

只有在程序成功執(zhí)行,沒(méi)錯(cuò)時(shí),才會(huì)commit.比如如果cat保存出錯(cuò),那么user就會(huì)回滾。

如果是單純的自定義SQL語(yǔ)句,可以通過(guò)如下方式實(shí)現(xiàn)

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)

用這種方式,實(shí)現(xiàn)自定義SQL語(yǔ)句的事務(wù),只要任何一條語(yǔ)句出錯(cuò),就會(huì)回滾.

那么,如果ORM與自定義SQL語(yǔ)句混合如何做呢,我在項(xiàng)目中結(jié)合了上面兩種方式。比如按如下的方式

@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

這上面的過(guò)程可以自己修改成自己需要的,我用的是AJAX方式,因?yàn)槲易约盒枰?,但總體上ORM與自定義SQL混合事務(wù),就可以這么控制了。

以上就是關(guān)于千鋒扣丁學(xué)堂Python培訓(xùn)之Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作的全部?jī)?nèi)容,希望對(duì)大家有所幫助,想要了解更多關(guān)于Python開(kāi)發(fā)方面內(nèi)容的小伙伴,請(qǐng)關(guān)注扣丁學(xué)堂Python培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育有專業(yè)的Python講師為您指導(dǎo),此外扣丁學(xué)堂老師精心推出的Python視頻教程定能讓你快速掌握Python從入門到精通開(kāi)發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Python技術(shù)交流群:279521237。


扣丁學(xué)堂微信公眾號(hào)                          Python全棧開(kāi)發(fā)爬蟲(chóng)人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)分析免費(fèi)公開(kāi)課直播間


      【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】         【掃碼進(jìn)入Python全棧開(kāi)發(fā)免費(fèi)公開(kāi)課】



查看更多關(guān)于"Python開(kāi)發(fā)資訊"的相關(guān)文章>

標(biāo)簽: Python培訓(xùn) Python視頻教程 Python在線視頻 Python學(xué)習(xí)視頻 Python培訓(xùn)班

熱門專區(qū)

暫無(wú)熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部