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实现数据库编程方法详解
Jun 09 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Python零基础入门学习之输入与输出
Apr 03 Python
Python交互式图形编程的实现
Jul 25 Python
为什么说Python可以实现所有的算法
Oct 04 Python
基于python实现学生信息管理系统
Nov 22 Python
python数字类型math库原理解析
Mar 02 Python
Python实现查找数据库最接近的数据
Jun 08 Python
Python实现爬取并分析电商评论
Jun 19 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
php 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
Js的MessageBox
2006/12/03 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Python subprocess模块学习总结
2014/03/13 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
Python while true实现爬虫定时任务
2020/06/08 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
安全协议书范本
2014/04/21 职场文书
补充协议书范本
2014/04/23 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
2014年团队工作总结
2014/11/24 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers