Python使用MySQLdb实现银行转账事务处理
本文总结Python通过MySQLdb库操作MySQL数据库实现银行转账模拟的方法。重点讲解连接对象与游标的创建、SQL语句以字符串形式执行,以及利用try-except-finally结构确保事务完整性。代码包含新增用户与转账逻辑,强调异常发生时使用rollback回滚的重要性,防止数据错误。
本文基于慕课网关于Python操作MySQL的学习内容进行了总结。在Python中操作数据库相对简便,得益于Python DB API统一了各类数据库的接口,使得开发者可以使用一致的接口对不同数据库进行操作。核心操作涉及connection对象与cursor对象:前者用于建立Python与数据库之间的通信通道,后者作为访问数据的游标(或指针)。在Python中,所有数据库结构化查询语言均以字符串形式呈现。此外,必须重视rollback(回滚)机制的作用:一旦操作失败,需将所有更改回滚至操作前的状态,否则可能导致数据不一致或错误。
在编写具体实例时,本文进一步体现了面向对象编程的思想。采用自顶向下的程序设计模式有助于清晰拆分程序功能,实现分而治之的策略。面向对象的封装特性在此过程中得到了充分展现,使代码结构更加清晰且易于维护。
具体实现代码如下,在原有转账功能的基础上,增加了添加新用户记录的功能模块。
#coding=utf8
import MySQLdb
import sys
class TranseferMonet(object):
def __init__(self,conn):
self.conn = conn
def createNewUser(self,userID,money):
cursor = self.conn.cursor()
try:
sql = 'INSERT account VALUES(%s,%s)' %(str(userID),str(money))
cursor.execute(sql)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
def transferMoney(self,transeferID,recivierID,money):
try:
self.checkID(transeferID)
self.checkID(receiverID)
self.checkEnoughMoney(transferID,money)
self.subMoney(transferID,money)
self.addMoney(receiverID,money)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
def checkID(self,userID):
cursor = self.conn.cursor()
try:
sql = 'SELECT userID FROM account WHERE userID = %s' %str(userID)
cursor.execute(sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("ID错误!")
finally:
cursor.close()
def checkEnoughMoney(self,transferID,money):
cursor = self.conn.cursor()
try:
sql = 'SELECT money FROM account WHERE userID = %s and money >= %s' %(str(transferID),str(money))
cursor.execute(sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("余额不足!")
finally:
cursor.close()
def subMoney(self,transferID,money):
cursor = self.conn.cursor()
try:
sql = 'UPDATE account SET money = money-%s WHERE userID = %s' %(str(money),str(transferID))
cursor.execute(sql)
if cursor.rowcount != 1:
raise Exception('减款失败!')
finally:
cursor.close()
def addMoney(self,receiverID,money):
cursor = self.conn.cursor()
try:
sql = 'UPDATE account SET money = money+%s WHERE userID = %s' %(str(money),str(receiverID))
cursor.execute(sql)
if cursor.rowcount != 1:
raise Exception('加款失败!')
finally:
cursor.close()
if __name__=="__main__":
transferID = 2002
receiverID = 2001
money = 300
newID = 2003
newmoney = 900
conn = MySQLdb.connect(host = '127.0.0.1',port = 3306,user = 'root',passwd = '914767195',db = 'test',charset = 'utf8')
trMoney = TranseferMonet(conn)
try:
trMoney.transferMoney(transferID,receiverID,money)
except Exception as e:
print "转账错误"+str(e)
try:
trMoney.createNewUser(newID,newmoney)
except Exception as e:
print "创建用户失败!"+str(e)
finally:
conn.close()
以上内容为本文的全部总结,希望能为读者在学习Python数据库操作方面提供有益参考,也欢迎大家继续支持本站获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













