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应用程序步骤及版本冲突问题解决
Nov 19 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
Python pass详细介绍及实例代码
Nov 24 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
Python pandas如何向excel添加数据
May 22 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
Python竟然能剪辑视频
May 25 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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
2009/06/29 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
详解YII关联查询
2016/01/10 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
java script编程起步(第三课)
2007/01/10 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python实现中文输出的两种方法
2015/05/09 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
python 使用shutil复制图片的例子
2019/12/13 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
自荐信怎么写好
2013/11/11 职场文书
终端业务员岗位职责
2013/11/27 职场文书
保险公司开门红口号
2014/06/21 职场文书
个人年终总结结尾
2015/03/06 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers