Pymsqlのシンプルなトランザクションのロールバック

オリジナルリンク: http://www.cnblogs.com/HapyyHao1314/p/7384436.html


#の
コード:UTF-8 インポートpymysqlの クラスTransferMoney(オブジェクト): デフ __init__ (自己、CONN): self.conn = CONN DEF check_acct_available(自己、acctid): カーソル = self.conn.cursor() してみてください SQLは = " SELECT * test_rowback FROM WHERE =%sの"%のacctidの cursor.execute(SQL) RS = cursor.fetchall() の場合 LEN(RS)= 1! 引き上げる(例外"申し訳ありませんが、%sのアカウントは、あなたが入力した情報が間違っている確認してください存在しない場合、「%のacctid) 最後に cursor.close() DEFのhas_enough_money(セルフ、acctid、マネー): カーソル = self.conn.cursor() のtry SQL = " SELECTは* FROM test_rowbackとWHERE user_money ID =%S> S%= "(acctid、マネー) cursor.execute(SQL) RS = cursor.fetchall() IF LEN(RS)= 1。! 昇給の例外を(" 資金不足に失敗した%sの口座振替につながる"%をacctid) 最後に cursor.close() デフ(自己、acctid、お金)reduce_money: カーソル = self.conn.cursor() してみてください SQL = " UPDATEのtest_rowbackのSET user_money = user_money-%sのWHERE ID =%sの"(お金、acctid) cursor.execute(SQL) の場合 cursor.rowcount = 1! 上げる例外(" 账户%sの转账失败"%のacctid) プリント" 转账成功"最後に cursor.close() デフadd_money(自己、acctid、お金): カーソル = self.conn.cursor() してみてください SQL = ' UPDATEのtest_rowbackのSETをuser_money = user_money +%sのWHERE ID =%sの'(お金、 acctid) cursor.execute(SQL) の場合 cursor.rowcount = 1! 上げる例外(" 账户%sの收款失败"%のacctid) プリント" 收款成功"最後に cursor.close() デフ転送(自己、source_acctid、target_acctid、お金): 試してください self.check_acct_available(source_acctid) self.check_acct_available(target_acctid) self.has_enough_money(source_acctid、お金) self.reduce_money(source_acctid、お金) self.add_money(target_acctid、お金) self.conn.commit() を除き、Eなど例外: self.conn.rollback() 上げるE 場合 __name__ == " __main__ " give_accid= 1 accept_accid = 2 お金 = 100 CONN = pymysql.connect( ホスト = ' 127.0.0.1 ' ポート = 3306 ユーザ = ' ルート' のpasswd = 'ルート' DB = ' Python_test ' 文字セット = ' UTF8 ' tr_money = TransferMoney(CONN) してみてください tr_money.transfer(give_accid、accept_accid、お金) を除き、Eなど例外: 印刷(e)の 最後に はconn.close()



データベース文を作成します。

表test_rowback(CREATE 
    IDのINT、
    USER_NAME VARCHAR( 1000年)、
    user_passwd VARCHAR( 1000年)、
    user_moneyのINT     
)ENGINE = INNODBのデフォルトの文字セット= UTF8と、

注:データベースを作成するときに、この文章ENGINE = INNODBのデフォルトの文字セット= UTF8を追加する必要があります。

 

ます。https://www.cnblogs.com/HapyyHao1314/p/7384436.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_30363509/article/details/94791923