flask-SQLAlchemy 使用 session.commit() 處理異常回滾

最為原始的try/except辦法,多次插入數據就要寫多次,很麻煩,使用python原生的contextlib.contextmanager簡化代碼!

 try:user_db = User(email=self.email, nickname=self.nickname, password=self.password)db.session.add(user_db)#所有的數據處理準備好之后,執行commit才會提交到數據庫!db.session.commit()
except Exception as e:#加入數據庫commit提交失敗,必須回滾!!!db.session.rollback()raise e

最優化的一種方式,這種方法很牛逼!(對于多個try/except很好的重復性)

from flask_sqlalchemy import SQLAlchemy as BaseSQLAlchemy
from contextlib import contextmanager# 自定義一個SQLAlchemy繼承flask_sqlalchemy的,方便自定義方法!!!
class  SQLAlchemy(BaseSQLAlchemy):# 利用contextmanager管理器,對try/except語句封裝,使用的時候必須和with結合!!!@contextmanagerdef auto_commit_db(self):try:yieldself.session.commit()except Exception as e:# 加入數據庫commit提交失敗,必須回滾!!!self.session.rollback()raise edb = SQLAlchemy()

利用with上下文管理方法調用!

from kirin_app.db_models.table_user import User
from kirin_app.db_models import dbclass RegisterViewModel:def __init__(self,form_data):self.email = form_data["email"]self.nickname = form_data["nickname"]self.password = form_data["password"]self.__add_db_data()# 把數據添加進入數據庫def __add_db_data(self):with db.auto_commit_db():user_db = User(email=self.email, nickname=self.nickname, password=self.password)db.session.add(user_db)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453832.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小米機器人清理主刷和軸承_掃地機主刷怎樣更換

原標題:掃地機主刷怎樣更換隨著電動掃地機逐漸取代手動清潔,電動掃地機的工作量不斷增加,從而導致主刷磨損更加嚴重,并增加了主刷更換的次數。因此,偉頓在這里告訴大家掃地機主刷怎樣更換:1 .首先&#xff…

多線程編程指南

1. 多線程編程指南1--線程基礎 線程編程指南1--線程基礎 Wednesday, 29. March 2006, 11:48:45 多線程 本文出自:BBS水木清華站 作者:Mccartney (coolcat) (2002-01-29 20:25:25) multithreading可以被翻譯成多線程控制。與傳統的UNIX不同,一個傳統 的UNIX進…

路由器和貓的區別

路由器和貓的區別 網絡在我們現在生活中必不可少,我們鏈接互聯網經常需要用到貓和路由器,但是依然有很多菜鳥根本不知道什么是貓什么是路由器,至于貓和路由器怎么使用就更不知道了,下面給大家詳細的講解下路由器和貓的區別。 路由器和貓的用途和鏈接位置不一樣,如下圖: 路由器:…

Docker 精通之 docker-compose

1、Docker-compose簡介 1.1、ocker-compose簡介 Docker-Compose項目是Docker官方的開源項目,負責實現對Docker容器集群的快速編排。   Docker-Compose將所管理的容器分為三層,分別是工程(project),服務&#xff08…

json數據格式 穗康碼_Json數據格式

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。JSON采用完全獨立于語言的文本格式,這些特性使JSON成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。JSON 比 XML 更小、更快,更易解析。JSON建構于兩種結…

Linux 系統版本查詢

顯示Linux版本信息輸入"cat /proc/version",說明正在運行的內核版本。輸入"cat /etc/issue", 顯示的是發行版本信息。輸入"lsb_release -a ",可對多個linux版本適用。輸入"uname -a ",可顯示電腦以及操作系統的相關信息。轉載于:https…

kafka 命令行命令大全

kafka 腳本 connect-distributed.sh connect-mirror-maker.sh connect-standalone.sh kafka-acls.sh kafka-broker-api-versions.sh kafka-configs.sh kafka-console-consumer.sh kafka-console-producer.sh kafka-consumer-groups.sh kafka-consumer-perf-test.sh kafka-dele…

kotlin將對象轉換為map_Kotlin程序將哈希映射(HashMap)轉換為列表(List)

Kotlin程序將哈希映射(HashMap)轉換為列表(List)在此程序中,您將學習在Kotlin中將map轉換為列表的不同方法。示例:將map轉換為列表示例import java.util.ArrayListimport java.util.HashMapfun main(args: Array) {val map HashMap()map.put(1, "a…

零元學Expression Blend 4 - Chapter 4元件重復運用的觀念

零元學Expression Blend 4 - Chapter 4元件重復運用的觀念 原文:零元學Expression Blend 4 - Chapter 4元件重復運用的觀念本章將教大家Blend元件重復運用的觀念,這在Silverlight設計中是非常重要的,另外加碼贈送漸層工具(Gradient Tool)。 ? 本章將教…

Python 內置模塊之 ConfigParser - 解析 ini 文件

ini配置文件是被configParser直接解析然后再加載的,如果只是修改配置文件,并不會改變已經加載的配置 INI文件結構簡單描述 INI文件就是擴展名為“ini”的文件。在Windows系統中,INI文件是很多,最重要的就是“System.ini”、“Sy…

電腦老是彈出vrvedp_m_出現三個可疑進程vrvedp_m.exe?vrvrf_c.exe?vrvsafec.exe

滿意答案 你機器里裝了北信源的DeviceRegist軟件,這個軟件不是殺毒軟件或者防毒軟件,而是一個遠程桌面管理軟件。這類軟件其實和木馬程序原理上一樣,只不過是正規軟件公司開發的,但是流氓程度不容小覷,即使在安全模式下也會加載vrvrf_c.exe,vrvedp_m.exe,vrvsafec.exe,wat…

音視頻編解碼 文件格式 協議內容詳解

編解碼學習筆記(一):基本概念 媒體業務是網絡的主要業務之間。尤其移動互聯網業務的興起,在運營商和應用開發商中,媒體業務份量極重,其中媒體的編解碼服務涉及需求分析、應用開發、釋放license收費等等。最…

git 拉取遠程其他分支代碼_【記錄】git 拉取遠程分支代碼,同步到另一個git上...

最近有需求從某git 上拉取所有分支代碼同步到另一git上,現記錄操作步驟,以便日后使用:1:先克隆其中一個分支代碼到本地環境git clone -b test http://賬號:密碼XXX.git2:查看本地分支git brach3:查看遠程分…

WIN下的CMD下載命令

certutil -urlcache -split -f 遠程地址 本地保存的文件跑徑與文 件名 # 如里不寫本地文 件名與路徑名, 會自動跟遠程文 件名相同, 并保存到當前目 錄下另一個是: bitsadmin /rawreturn /transfer getfile http://download.sysinternals.com…

python 第三方模塊之 APScheduler - 定時任務

介紹 APScheduler的全稱是Advanced Python Scheduler。它是一個輕量級的 Python 定時任務調度框架。APScheduler 支持三種調度任務:固定時間間隔,固定時間點(日期),Linux 下的 Crontab 命令。同時,它還支持…

hadoop分布式搭建

一,前提:下載好虛擬機和安裝完畢Ubuntu系統。因為我們配置的是hadoop分布式,所以需要兩臺虛擬機,一臺主機(master),一臺從機(slave) 選定一臺機器作為 Master 在 Master …

Python 第三方模塊之 imgaug (圖像增強)

imgaug是一個封裝好的用來進行圖像augmentation的python庫,支持關鍵點(keypoint)和bounding box一起變換。 項目主頁: imgaug doc 1. 安裝和卸載 # 通過github安裝 sudo pip install githttps://github.com/aleju/imgaug# 通過pypi安裝 sudo pip install imgaug# 本地安裝, …

MPEG(mpeg1,mpeg2,mpeg4) 與H264 QP值間 關系

H264 Quant與MPEG Quant數值參對表 x264vfw 的1pass 是按照I q:21P q:24B q:26的量化算的,而且在vfw里面不能改變這些參數.但在mencoder里則可以定義1pass的 qp_constant<1?51>這個和xvid不同的,xvid一般是用q2跑1pass的,當然你也可以在x264設置一下,但是要清楚的是 H.2…

maya腳本用python還是mel_替換/替換材質的Maya Python/MEL腳本

在CreativeCrash上有一個舊線程處理此問題。我在那里展示的腳本如下(請參閱原始線程了解更多信息)&#xff1a;proc connectAndSet(string $original, string $target){$conn connectionInfo -sfd $original;if ($conn ! ""){connectAttr -force $conn $target;} el…

FreeBSD長模式不兼容

二進制轉換與此平臺上的長模式不兼容。此虛擬環境中的長模式將被禁用。因此需要使用長模式的應用程序將無法正常運行。請參見 http://vmware.com/info?id152 了解更多詳細信息。 mark轉載于:https://www.cnblogs.com/tuhooo/p/8116442.html