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

 更新时间:2016年05月24日 16:11:32   作者:沙拉虎  
这篇文章主要介绍了Python3连接MySQL(pymysql)模拟转账实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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异常基类BaseException详解

    python异常基类BaseException详解

    这篇文章主要为大家介绍了python异常基类BaseException详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • pandas计算最大连续间隔的方法

    pandas计算最大连续间隔的方法

    今天小编就为大家分享一篇pandas计算最大连续间隔的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python jenkins 打包构建代码的示例代码

    python jenkins 打包构建代码的示例代码

    这篇文章主要介绍了python jenkins 打包构建代码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • python实现的登录与提交表单数据功能示例

    python实现的登录与提交表单数据功能示例

    这篇文章主要介绍了python实现的登录与提交表单数据功能,结合实例形式分析了Python表单登录相关的请求与响应操作实现技巧,需要的朋友可以参考下
    2019-09-09
  • 使用flask如何获取post请求参数

    使用flask如何获取post请求参数

    近日在使用flask框架获取前端的请求时获取参数时,遇到了几个问题,所以下面这篇文章主要给大家介绍了关于使用flask如何获取post请求参数的相关资料,需要的朋友可以参考下
    2022-08-08
  • python调试工具Birdseye的使用教程

    python调试工具Birdseye的使用教程

    调试是写出良好代码的必备条件,Birdseye是一款优秀的用于python的调试工具,本文简单的介绍了Birdseye的使用方法
    2021-05-05
  • opencv 形态学变换(开运算,闭运算,梯度运算)

    opencv 形态学变换(开运算,闭运算,梯度运算)

    这篇文章主要介绍了opencv 形态学变换(开运算,闭运算,梯度运算),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java byte数组操纵方式代码实例解析

    Java byte数组操纵方式代码实例解析

    这篇文章主要介绍了Java byte数组操纵方式代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Tensorflow卷积实现原理+手写python代码实现卷积教程

    Tensorflow卷积实现原理+手写python代码实现卷积教程

    这篇文章主要介绍了Tensorflow卷积实现原理+手写python代码实现卷积教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Flask框架运用Ajax实现数据交互的示例代码

    Flask框架运用Ajax实现数据交互的示例代码

    使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载刷新整个页面,这使得程序能够更快地回应用户的操作,本文将简单介绍使用AJAX如何实现前后端数据通信
    2022-11-11

最新评论