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装饰器decorator用法实例
Nov 10 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
python实现ip代理池功能示例
Jul 05 Python
python flask搭建web应用教程
Nov 19 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
浅析Python中字符串的intern机制
Oct 03 Python
python os.rename实例用法详解
Dec 06 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
Protoss热键控制
2020/03/14 星际争霸
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
python批量下载图片的三种方法
2013/04/22 Python
Python描述器descriptor详解
2015/02/03 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
python 实现线程之间的通信示例
2020/02/14 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python实现程序重启和系统重启方式
2020/04/16 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
工厂仓管员岗位职责范本
2014/07/17 职场文书
先进事迹演讲稿
2014/09/01 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
童年读书笔记
2015/06/26 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js