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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Python内置函数OCT详解
Nov 09 Python
python处理Excel xlrd的简单使用
Sep 12 Python
python实现类之间的方法互相调用
Apr 29 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
python读取hdfs并返回dataframe教程
Jun 05 Python
Python多线程的退出控制实现
Aug 10 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
python使用shell脚本创建kafka连接器
Apr 29 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 加密解密内部算法
2010/04/22 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP错误机制知识汇总
2016/03/24 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
win10系统中安装scrapy-1.1
2016/07/03 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python有几个版本
2020/06/17 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
缓刑人员的思想汇报
2014/01/11 职场文书
自荐信格式范文
2015/03/04 职场文书
教学质量月活动总结
2015/05/11 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
Sql Server之数据类型详解
2022/02/28 SQL Server