mysql MySQLdb中的事務處理

2021-09-08 12:27:10 字數 2443 閱讀 6523

mysql資料庫有乙個自動提交事務的概念,autocommit。含義是,如果開啟autocommit, 則每乙個語句執行後會自動提交。即乙個語句視為乙個事務。

在python使用的mysqldb中,預設是不開啟autocommit的。所以,只有在顯示commit後,資料庫操作才會真正提交。或者在rollback()後,回滾到上一次commit的狀態。

例:

#!/bin/

env python

#coding

=utf-

8import mysqldb

class mysql(object):

def __init__(self):

self.db

= mysqldb.connect("localhost","root","12345678","testtable",charset=

'utf8')

self.

cursor

= self.db.cursor

()

def test(self):

try:

sql

= "insert

into test_distinct(name, type) values('

t3','1'

)" self.

cursor.execute

(sql)

sql

= "update test_distinct set type='2

'where name='t3

'"#raise #開啟用於測試異常

self.

cursor.execute

(sql)

except

: self.db.

rollback

() #出現異常,不會提交任何資料變化

else

: self.db.

commit

() #正常處理,提交資料變化(如果沒有這一句,也是不會提交任何變化的)

if __name__ ==

"__main__":

obj

=mysql()

obj.test()

場景:在兩次插入語句直接有乙個查詢語句

#

!/bin/env python

#coding=utf-8

import

mysqldb

class

mysql(object):

def__init__

(self):

self.db = mysqldb.connect("

localhost

","root

","12345678

","testtable

",charset='

utf8')

self.cursor =self.db.cursor()

deftest(self):

try:

name = 't5'

#insert

sql = "

insert into test_distinct(name, type) values('%s','1')

" %name

self.cursor.execute(sql)

#search

sql = "

select * from test_distinct where name = '%s'

" %name #查詢新插入的資料

self.cursor.execute(sql)

res =self.cursor.fetchone()

print

res

#insert

sql = "

update test_distinct set type='2' where name='%s'

" %name

raise

#引起異常

self.cursor.execute(sql)

except

: self.db.rollback()

else

: self.db.commit()

if__name__ == "

__main__":

obj =mysql()

obj.test()

結果:可以正確查詢到新插入的資料,並且資料成功回滾,沒有寫入資料。

結論:雖然沒有commit時,資料庫不會真正變化,但是會有乙個臨時變化的版本,供我們查詢還未真正加入的資料。

注意:上面的結果是建立在mysql使用的儲存引擎支援事務的基礎上的。如果用myisam,則即使像上面一樣寫**,也會預設一句話就提交一次的,因為myisam不支援事務。

生活中事 待續

樓市 乙個非股民的 心情 我這個人一向對時下流行的東西不是很敏感,特別是對一些人們一味推崇瘋狂追捧的事物,如追星,如 但人處在這個社會是不能也無法孤立存在的,人非聖賢,隨時隨地都會受著外界的事物的影響 侵擾。正如現正愈演愈烈的 風波,衝擊著每乙個凡夫俗子的神經。以前對於 只源於在茶餘飯後朋友聊天中的...

ibatis中SqlMapClient事務處理

ibatis中sqlmapclient事務 sqlmapclient.starttransaction 開始事務sqlmapclient.committransaction 提交事務sqlmapclient.endtransaction 結束事務,操作失敗的時候,整個事務就會在endtransact...

工作中的二三事

最近不知怎麼搞的,老是容易累,也許是近期剛從普吉島回來有關,身體還沒完全適應上海的下雪天,又或許是對最近的生活不甚滿意,我不知道。以至於胡思亂想的突然又有了要寫點什麼東西的感覺,人啊,就是矯情。工作質量如何評估呢?這個恐怕要因工作而異了吧。做軟體的都知道,軟體開發最重要的一環就是迭代的速度,在交付前...