python 怎么操作数据库事务

Python018

python 怎么操作数据库事务,第1张

# -*- coding: utf-8 -*-

import sys

import MySQLdb

reload(sys)

sys.setdefaultencoding('utf-8')

class DB(object):

 def __init__(self,host='127.0.0.1',port=3306,user='root',passwd='123',database=''):

  self.__host=host

  self.__port=port

  self.__user=user

  self.__passwd=passwd

  self.__database=database

  self.__open=False

  print '__init__'

 def __connect__(self):

  if self.__open == False:

   print 'connect db...' 

   self.__conn = MySQLdb.connect(host=self.__host , port=self.__port , user=self.__user , passwd=self.__passwd,charset='utf8')

   self.__open = True def __executeSql__(self,sql):

  self.__connect__()

  self.__executor = self.__conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

  self.__executor.execute('use '+self.__database) #切换数据库

  return self.__executor.execute(sql)

 def executeQueryForObject(self , sql):

  self.__executeSql__(sql)

  return self.__executor.fetchone()

 '''

 返回key=value 字典

 '''

 def executeQueryAll(self , sql):

  self.__executeSql__(sql)

  return self.__executor.fetchall()

 def executeUpdate(self ,sql='' , isAutoCommit=False):

  c = self.__executeSql__(sql)

  if isAutoCommit == True:

   self.commit() #提交事务

  return c

 '''

 #提交事务

 '''

 def commit(self):

   self.__conn.commit() #提交事务

 '''

 #关闭数据库,释放资源

 '''

 def closeDB(self):

  if not self.__conn is None:

   print 'close db...'

   self.__conn.commit() #提交事务

   self.__conn.close()

 def print_parameters(self):

  print self.__user 

  print self.__passwd

  print self.__host

  print self.__port

'''

if __name__ == '__main__':

 db=DB(database='tb2013')

 #db.print_parameters()

 #db.executeSql('select * from tb_user')

 print db.executeQueryForObject('select count(*) as count from tb_user')

 _rows = db.executeQueryAll('select userid,nick from tb_user limit 10')

 print _rows

 for row in _rows:

  print row

  print 'nick:%s' % str(row['nick'])

 print db.executeUpdate(sql='update tb_user set nick=\'test\' where userid=95084397',isAutoCommit=True)

 db.closeDB()

'''

不执行怎么知道它是错的呢。所以不执行是不可能的。只能采用回退。

你在事务开始的时候,做一个回退点。比如备份所有的参数。 再比如你做数据库写的时候不做commit等等。

如果事务中有错误,就回退到原来的回退点。 或者是启动恢复,或者是不commit。或者是使用数据库的rollback功能。

就是备份恢复的意思。