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局域网ip扫描示例分享
Apr 03 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
python删除列表中重复记录的方法
Apr 28 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
学习和使用python的13个理由
Jul 30 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python 如何实现数据库表结构同步
Sep 29 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
微信支付扫码支付php版
2016/07/22 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
基于jquery的Repeater实现代码
2010/07/17 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
2018/10/09 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
javascript History对象原理解析
2020/02/17 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
实施意见格式范本
2015/06/05 职场文书
小学大队委竞选口号
2015/12/25 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android