Python操作MySQL模拟银行转账
今天在慕课网上学习了有关于python操作MySQL的相关知识,在此做些总结。python操作数据库还是相对比较简单的,由于python统一了各个数据库的接口程序,也就是所谓的PythonDB,所以无论使用何种数据可,都可以用统一的接口对数据库进行操作。操作中主要涉及connection对象的操作和cursor的操作,前者主要是为了建立起python与数据库的数据交换通道,后者则是访问数据的游标,也可以理解为指针。数据库的相关结构化语言在Python中均是以字符串的形式呈现的。另外注意rollback的重要性,一旦操作失败,所有操作都要回滚到之前的状态,否则会发生错误。
另外,在编写实例的时候,对于面向对象的编程思路又有了新的认识,自顶向下的程序编写模式非常有利于拆分程序的功能,分而治之。面向对象的封装性在此提醒的淋漓尽致!
代码如下,在原有基础上,我又增加了添加记录的功能。
#coding=utf8 importMySQLdb importsys classTranseferMonet(object): def__init__(self,conn): self.conn=conn defcreateNewUser(self,userID,money): cursor=self.conn.cursor() try: sql='INSERTaccountVALUES(%s,%s)'%(str(userID),str(money)) cursor.execute(sql) self.conn.commit() exceptExceptionase: self.conn.rollback() raisee deftransferMoney(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() exceptExceptionase: self.conn.rollback() raisee defcheckID(self,userID): cursor=self.conn.cursor() try: sql='SELECTuserIDFROMaccountWHEREuserID=%s'%str(userID) cursor.execute(sql) rs=cursor.fetchall() iflen(rs)!=1: raiseException("ID错误!") finally: cursor.close() defcheckEnoughMoney(self,transferID,money): cursor=self.conn.cursor() try: sql='SELECTmoneyFROMaccountWHEREuserID=%sandmoney>=%s'%(str(transferID),str(money)) cursor.execute(sql) rs=cursor.fetchall() iflen(rs)!=1: raiseException("余额不足!") finally: cursor.close() defsubMoney(self,transferID,money): cursor=self.conn.cursor() try: sql='UPDATEaccountSETmoney=money-%sWHEREuserID=%s'%(str(money),str(transferID)) cursor.execute(sql) ifcursor.rowcount!=1: raiseException('减款失败!') finally: cursor.close() defaddMoney(self,receiverID,money): cursor=self.conn.cursor() try: sql='UPDATEaccountSETmoney=money+%sWHEREuserID=%s'%(str(money),str(receiverID)) cursor.execute(sql) ifcursor.rowcount!=1: raiseException('加款失败!') 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) exceptExceptionase: print"转账错误"+str(e) try: trMoney.createNewUser(newID,newmoney) exceptExceptionase: print"创建用户失败!"+str(e) finally: conn.close()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。