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获取文件扩展名的方法
Jul 06 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
基于python中theano库的线性回归
Aug 31 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
Python 20行简单实现有道在线翻译的详解
May 15 Python
Python编写通讯录通过数据库存储实现模糊查询功能
Jul 18 Python
Python 转换文本编码实现解析
Aug 27 Python
python装饰器的特性原理详解
Dec 25 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
python 3.8.3 安装配置图文教程
May 21 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 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入门学习的几个不错的实例代码
2008/07/13 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
JS 自动安装exe程序
2008/11/30 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
python中根据字符串调用函数的实现方法
2016/06/12 Python
python中subprocess批量执行linux命令
2018/04/27 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
Python日志syslog使用原理详解
2020/02/18 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
python实现KNN近邻算法
2020/12/30 Python
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
社区工作者先进事迹
2014/01/18 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
夜不归宿检讨书
2014/02/25 职场文书
开工典礼策划方案
2014/05/23 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
MySQL kill不掉线程的原因
2021/05/07 MySQL
利用JavaScript写一个简单计算器
2021/11/27 Javascript
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技