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+Django在windows下的开发环境配置图解
Nov 11 Python
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
python中的sort方法使用详解
Jul 25 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python温度转换实例分析
Jan 17 Python
python覆盖写入,追加写入的实例
Jun 26 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
pandas实现将日期转换成timestamp
Dec 07 Python
Python while true实现爬虫定时任务
Jun 08 Python
Django静态文件加载失败解决方案
Aug 26 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
Python+tkinter实现高清图片保存
Mar 13 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的5个入手程序
2006/11/23 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
php基础教程
2015/08/26 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
vue页面离开后执行函数的实例
2018/03/13 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
Python验证码识别处理实例
2015/12/28 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
公司培训欢迎词
2014/01/10 职场文书
高中地理教学反思
2014/01/29 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
法律意见书范文
2015/05/20 职场文书
泰坦尼克号观后感
2015/06/04 职场文书