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 相关文章推荐
centos下更新Python版本的步骤
Feb 12 Python
python实现在IDLE中输入多行的方法
Apr 19 Python
python 编码规范整理
May 05 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
pytorch标签转onehot形式实例
Jan 02 Python
python 的topk算法实例
Apr 02 Python
python从ftp获取文件并下载到本地
Dec 05 Python
python 实现端口扫描工具
Dec 18 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
Matplotlib绘制混淆矩阵的实现
May 27 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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
PHP4中session登录页面的应用
2008/07/25 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
浅谈Python实现Apriori算法介绍
2017/12/20 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
python实现猜拳小游戏
2020/04/05 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
大专生工程监理求职信
2013/10/04 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
element多个表单校验的实现
2021/05/27 Javascript
小程序实现文字循环滚动动画
2021/06/14 Javascript
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技