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