Python 操作MySQL实例之银行转账模拟
来源:互联网 发布:晋城监狱网络改造 编辑:程序博客网 时间:2024/05/02 01:57
今天在慕课网上学习了有关于python操作MySQL的相关知识,在此做些总结。python操作数据库还是相对比较简单的,由于python统一了各个数据库的接口程序,也就是所谓的Python DB,所以无论使用何种数据可,都可以用统一的接口对数据库进行操作。操作中主要涉及connection对象的操作和cursor的操作,前者主要是为了建立起python与数据库的数据交换通道,后者则是访问数据的游标,也可以理解为指针。数据库的相关结构化语言在Python中均是以字符串的形式呈现的。另外注意rollback的重要性,一旦操作失败,所有操作都要回滚到之前的状态,否则会发生错误。
另外,在编写实例的时候,对于面向对象的编程思路又有了新的认识,自顶向下的程序编写模式非常有利于拆分程序的功能,分而治之。面向对象的封装性在此提醒的淋漓尽致!
代码如下,在原有基础上,我又增加了添加记录的功能。
#coding=utf8import MySQLdbimport sysclass 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()
0 0
- Python 操作MySQL实例之银行转账模拟
- python操作mysql--银行转账实例
- python操作MySQL 模拟简单银行转账操作
- python操作MySQL 模拟简单银行转账操作
- MySQL数据库事务实例(模拟银行转账)
- 实践项目七:模拟银行转账系统(python+mysql)
- Python操作MySQL-(3)转账实例
- Java模拟银行转账(操作事务)
- 简单的MySQL银行转账实例
- python-mysql超简单银行转账
- 模拟银行转账信息
- 模拟一个银行转账流程的Python小程序
- C#模拟银行转账系统
- 初学python,模拟转账
- python 简单的数据库操作之转账
- Android——简单模拟银行转账
- 使用事务实现银行转账操作
- 银行转账存储过程类似(mysql)
- CSS3之边框属性border
- codeforces 420C. Bug in Code
- 【NuGet】远程服务器返回错误:<403>已禁止
- springmvc controller的泛化
- 变(1)
- Python 操作MySQL实例之银行转账模拟
- [Oracle] 物理结构介绍
- 关于SVN的SSL加密问题
- hadoop2版本和hadoop1版本的第三方jar包的位置问题
- UnityEngine.Quaternion.LookRotation详解
- 拷贝构造函数,浅拷贝,深拷贝
- 爱奇艺2016校招面试题目
- C++ STL中Map的按Key排序和按Value排序
- 5.2 calendar--通用日期的相关函数(2)