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 12 Python
Python中的日期时间处理详解
Nov 17 Python
Python的标准模块包json详解
Mar 13 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
用pycharm开发django项目示例代码
Oct 24 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
Django--权限Permissions的例子
Aug 28 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
python读取xml文件方法解析
Aug 04 Python
用Python写一个简易版弹球游戏
Apr 13 Python
python中super()函数的理解与基本使用
Aug 30 Python
python创建字典及相关管理操作
Apr 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实现的文件浏览器功能简单示例
2019/09/12 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
详解微信UnionID作用
2019/05/15 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
JavaScript实现点击切换功能
2021/01/27 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
python关于倒排列的知识点总结
2020/10/13 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
环境工程专业自荐信范文
2014/03/18 职场文书
文明村镇申报材料
2014/05/06 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2015年保送生自荐信
2015/03/24 职场文书
安全生产奖惩制度
2015/08/06 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python