本篇內容介紹了“ORM中的鎖與事務介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
select_for_update(nowait=False,skip_locked=False)#注意必須用在事務里面,至于如何開啟事務,我們看下面的事務一節。
返回一個鎖住行直到事務結束的查詢集,如果數據庫支持,它將生成一個SELECT...FORUPDATE語句。
所有匹配的行將被鎖定,直到事務結束。這意味著可以通過鎖防止數據被其它事務修改。
一般情況下如果其他事務鎖定了相關行,那么本查詢將被阻塞,直到鎖被釋放。如果這不想要使查詢阻塞的話,使用select_for_update(nowait=True)。如果其它事務持有沖突的鎖,互斥鎖,那么查詢將引發DatabaseError異常。你也可以使用select_for_update(skip_locked=True)忽略鎖定的行。nowait和skip_locked是互斥的,同時設置會導致ValueError。
目前,postgresql,oracle和mysql數據庫后端支持select_for_update()。但是,MySQL不支持nowait和skip_locked參數。
使用不支持這些選項的數據庫后端(如MySQL)將nowait=True或skip_locked=True轉換為select_for_update()將導致拋出DatabaseError異常,這可以防止代碼意外終止。
關于MySQL的事務處理,我的mysql博客已經說的很清楚了,那么我們來看看Django是如果做事務處理的。django1.8版本之前是有很多種添加事務的方式的,中間件的形式(全局的)、函數裝飾器的形式,上下文管理器的形式等,但是很多方法都在1.8版之后給更新了,下面我們只說最新的:
在Web應用中,常用的事務處理方式是將每個請求都包裹在一個事務中。這個功能使用起來非常簡單,你只需要將它的配置項ATOMIC_REQUESTS設置為True。
它是這樣工作的:當有請求過來時,Django會在調用視圖方法前開啟一個事務。如果請求卻正確處理并正確返回了結果,Django就會提交該事務。否則,Django會回滾該事務。
“ORM中的鎖與事務介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。