Python操作MySQL模拟银行转账


Posted in Python onMarch 12, 2018

今天在慕课网上学习了有关于python操作MySQL的相关知识,在此做些总结。python操作数据库还是相对比较简单的,由于python统一了各个数据库的接口程序,也就是所谓的Python DB,所以无论使用何种数据可,都可以用统一的接口对数据库进行操作。操作中主要涉及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 相关文章推荐
python 正则式 概述及常用字符
May 07 Python
浅析Python中的序列化存储的方法
Apr 28 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python执行精确的小数计算方法
Jan 21 Python
python openpyxl使用方法详解
Jul 18 Python
python+pygame实现坦克大战
Sep 10 Python
python统计指定目录内文件的代码行数
Sep 19 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
python3 图片referer防盗链的实现方法
Mar 12 #Python
tensorflow构建BP神经网络的方法
Mar 12 #Python
Python管理Windows服务小脚本
Mar 12 #Python
python实现教务管理系统
Mar 12 #Python
python编写弹球游戏的实现代码
Mar 12 #Python
python学生管理系统代码实现
Apr 05 #Python
python图书管理系统
Apr 05 #Python
You might like
我用php+mysql写的留言本
2006/10/09 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
FireFox JavaScript全局Event对象
2009/06/14 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
详解Node 定时器
2018/02/26 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python简单实现enum功能的方法
2016/04/25 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python数据存储之 h5py详解
2019/12/26 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python中关于数据类型的学习笔记
2020/07/19 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
领导党性分析材料
2014/02/15 职场文书
职务说明书范文
2014/05/07 职场文书
介绍信范文
2015/01/31 职场文书