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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
python监控键盘输入实例代码
Feb 09 Python
python list格式数据excel导出方法
Oct 31 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
ubuntu上安装python的实例方法
Sep 30 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
python的flask框架难学吗
Jul 31 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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
新闻分类录入、显示系统
2006/10/09 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python3 log10()函数简单用法
2019/02/19 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
python中p-value的实现方式
2019/12/16 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
结束运行python的方法
2020/06/16 Python
python如何停止递归
2020/09/09 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
数据库面试要点基本概念
2013/10/31 面试题
高中运动会入场词
2014/02/14 职场文书
高中生职业规划范文
2014/03/09 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电