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合并两个字典的常用方法与效率比较
Jun 17 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
分析经典Python开发工程师面试题
Apr 08 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
Django之模板层的实现代码
Sep 09 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 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
NOT NULL 和NULL
2007/01/15 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
angular json对象push到数组中的方法
2018/02/27 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
python版学生管理系统
2018/01/10 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
python tkinter基本属性详解
2019/09/16 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
冰淇淋店的创业计划书
2014/02/07 职场文书
公司寄语大全
2014/04/10 职场文书
C++程序员求职信范文
2014/04/14 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技