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框架中settings文件的部署建议
May 30 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
Python命名空间的本质和加载顺序
Dec 17 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
Win10环境python3.7安装dlib模块趟过的坑
Aug 01 Python
Python 变量的创建过程详解
Sep 02 Python
Python生成器常见问题及解决方案
Mar 21 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
520使用Python实现“我爱你”表白
May 20 Python
python如何代码集体右移
Jul 20 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
Python IO文件管理的具体使用
Mar 20 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学习笔记之面向对象
2014/11/08 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
Python入门篇之字典
2014/10/17 Python
Python中enumerate函数代码解析
2017/10/31 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
python3多线程知识点总结
2019/09/26 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
TCP/IP的分层模型
2013/10/27 面试题
介绍一下Linux文件的记录形式
2013/09/29 面试题
珠宝店促销方案
2014/03/21 职场文书
小学生安全演讲稿
2014/04/25 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书