Python 執行 MySQL 事務

來源:互聯網
上載者:User

標籤:增加   隔離   let   需要   exception   except   用法   any   使用者   

一、MySQL 事務

事務就是指邏輯上的一組 SQL 操作,組成這組操作的各個 SQL 陳述式,執行時要麼全成功要麼全失敗。

舉個例子,小明給小紅轉賬100元,轉賬過程實際上就是小明的賬戶減少100元,小紅的賬戶增加100元,對應的SQL語句為:

update account set money=money-5 where name=‘xiaoming‘;
update account set money=money+5 where name=‘xiaohong‘;

上述的兩條SQL操作,在事務中的操作就是要麼都執行成功,要麼都執行失敗,如果只有第一條成功,那麼小明就損失100元,而小紅並沒有收到100元,這是不可取的,所以這就是事務,事務就是指邏輯上的一組 SQL 操作,組成這組操作的各個 SQL 陳述式,執行時要麼全成功要麼全失敗。交易處理可以用來維護資料庫的完整性,保證成批的 SQL 陳述式要麼全部執行,要麼全部不執行,在 MySQL 中只有使用了 Innodb 庫引擎的資料庫或表才支援事務,所以很多情況下我們都使用 Innodb 引擎.

事務的特性如下:

原子性:事務是一個不可分割的單位,事務中的所有 SQL 操作要麼都成功,要麼都失敗
一致性:事務發生前和發生後,資料的完整性必須保持一致
隔離性:當並發訪問資料庫時,一個正在執行的事務在執行完畢前,對於其它的會話是不可見的,多個並發事務之間的資料是相互隔離的
持久性:一個事務一旦被提交,它對資料庫中的資料改變就是永久性的,如果出了錯誤,事務也不允許撤銷,只能通過 "補償性事務"

mysql> begin      # 開啟事務mysql> rollback   # 復原事務mysql> commit     # 提交事務

資料庫預設事務是自動認可的,也就是說,當我們執行 select,insert,update,delete 等操作時,就會自動認可事務,如果關閉事務的自動認可,那麼我們執行完 select,insert,update,delete 操作後需要再執行 commit 來提交事務,否則就不會執行

二、遊標

遊標是系統為使用者開設的一個資料緩衝區,存放 SQL 陳述式的執行結果,用法如下:

In [1]: import MySQLdbIn [2]: c = MySQLdb.connect(user=‘root‘, passwd=‘pzk123‘, db=‘mysql‘)    # 串連資料庫In [3]: cus = c.cursor()                      # 建立一個遊標對象In [4]: cus.execute(‘select * from user;‘)    # 使用execute()方法可以執行SQL語句,執行後的結果會存在緩衝區Out[4]: 4LIn [5]: result1 = cus.fetchone()              # 可以使用fetchone()來查看緩衝區的一條記錄In [6]: result2 = cus.fetchmany(3)            # 可以使用fetchmany()來查看緩衝區的多條記錄 In [7]: result3 = cus.fetchall()              # 可以使用fetchall()來查看所有的記錄

 

三、根據遊標執行 MySQL 事務

#!/usr/bin/env pythonimport MySQLdbdef connect_mysql():    db_config = {        ‘host‘: ‘127.0.0.1‘,        ‘port‘: 3306,        ‘user‘: ‘root‘,        ‘passwd‘: ‘pzk123‘    }    c = MySQLdb.connect(**db_config)    return cif __name__ == ‘__main__‘:    c = connect_mysql()              # 首先串連資料庫    cus = c.cursor()                 # 產生遊標對象    sql = ‘drop database test;‘      # 定義要執行的SQL語句    try:        cus.execute(sql)             # 執行SQL語句        c.commit()                   # 如果執行成功就提交事務    except Exception as e:         c.rollback()                 # 如果執行失敗就復原事務        raise e    finally:        c.close()                    # 最後記得關閉資料庫連接

 

 

 

 

 

            

Python 執行 MySQL 事務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.