Python3连接MySQL(pymysql)模拟转账实现代码


Posted in Python onMay 24, 2016

本文实例为大家分享了Python3连接MySQL模拟转账的具体实现代码,供大家参考,具体内容如下

# coding:utf8
import sys
import pymysql
 
class TransferMoney(object):
  def __init__(self,conn):
    self.conn=conn
 
  def check_acct_available(self,acctid):
    cursor = self.conn.cursor()
    try:
      sql="select * from account where acctid=%s" % acctid
      cursor.execute(sql)
      print ("check_acct_available:" + sql)
      rs = cursor.fetchall()
      if len(rs) ! = 1:
        raise Exception("账号%s不存在"% acctid)
    finally:
      cursor.close()
 
 
 
  def has_enough_money(self,acctid,money):
    cursor = self.conn.cursor()
    try:
      sql="select * from account where acctid=%s and money>%s" % (acctid,money)
      cursor.execute(sql)
      print ("has_enough_money:"+sql)
      rs = cursor.fetchall()
      if len(rs) ! = 1:
        raise Exception("账号%s余额不足"% acctid)
    finally:
      cursor.close()
 
 
  def reduce_money(self,acctid,money):
    cursor = self.conn.cursor()
    try:
      sql = "update account set money=money-%s where acctid=%s" % (money,acctid)
      cursor.execute(sql)
      print ("reduce_money:"+sql)
      if cursor.rowcount ! = 1:
        raise Exception("账号%s减款失败" % acctid)
    finally:
      cursor.close()
 
  def add_money(self,acctid,money):
    cursor = self.conn.cursor()
    try:
      sql="update account set money=money+%s where acctid=%s" % (money,acctid)
      cursor.execute(sql)
      print ("add_money:"+sql)
      if cursor.rowcount ! = 1:
        raise Exception("账号%s加款失败" % acctid)
    finally:
      cursor.close()
 
 
  def transfer(self,source_acctid,target_acctid,money):
    try:
      self.check_acct_available(source_acctid)
      self.check_acct_available(target_acctid)
      self.has_enough_money(source_acctid,money)
      self.reduce_money(source_acctid,money)
      self.add_money(target_acctid,money)
      self.conn.commit()
    except Exception as e:
      self.conn.rollback()
      raise e
 
 
if __name__ == "__main__":
  source_acctid = sys.argv[1]
  target_acctid = sys.argv[2]
  money = sys.argv[3]
 
 
  conn = pymysql.Connect(
            host = 'localhost',
            unix_socket = "..mysql/mysql.sock",
            port = 3306,
            user = 'root',
            passwd = '',
            db = 'python_db',
                    )
  tr_money = TransferMoney(conn)
 
  try:
    tr_money.transfer(source_acctid,target_acctid,money)
  except Exception as e:
    print ("出现问题" + str(e))
  finally:
    conn.close()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

Python 相关文章推荐
跟老齐学Python之不要红头文件(2)
Sep 28 Python
Python中使用装饰器和元编程实现结构体类实例
Jan 28 Python
python获得一个月有多少天的方法
Jun 04 Python
python中引用与复制用法实例分析
Jun 04 Python
Python制作Windows系统服务
Mar 25 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
python logging 日志的级别调整方式
Feb 21 Python
Django 再谈一谈json序列化
Mar 16 Python
Django设置Postgresql的操作
May 14 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
用Python写一个无界面的2048小游戏
May 24 #Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 #Python
Python中set与frozenset方法和区别详解
May 23 #Python
python实现多线程的两种方式
May 22 #Python
python实现简单购物商城
May 21 #Python
python字符串的常用操作方法小结
May 21 #Python
python实现用户登录系统
May 21 #Python
You might like
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
Python面向对象实现方法总结
2020/08/12 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
历史学专业推荐信
2013/11/06 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
消防安全责任书
2014/04/14 职场文书
社区清明节活动总结
2014/07/04 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
JavaScript异步操作中串行和并行
2021/11/20 Javascript
MySQL学习必备条件查询数据
2022/03/25 MySQL
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python