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中关于使用模块的基础知识
May 24 Python
Python fileinput模块使用实例
Jun 03 Python
Python安装第三方库的3种方法
Jun 21 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
python+os根据文件名自动生成文本
Mar 21 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
python破解同事的压缩包密码
Oct 14 Python
python3中布局背景颜色代码分析
Dec 01 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
在PHP中执行系统外部命令
2006/10/09 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
医院护士的求职信范文
2013/12/26 职场文书
商务英语广告词大全
2014/03/18 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
解除合同协议书
2014/04/17 职场文书
给校长的建议书200字
2014/05/16 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
python 经纬度求两点距离、三点面积操作
2021/06/03 Python