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脚本处理空格的方法
Aug 08 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
python技能之数据导出excel的实例代码
Aug 11 Python
Python实现简易版的Web服务器(推荐)
Jan 29 Python
python 2.7.14安装图文教程
Apr 08 Python
Python3中的json模块使用详解
May 05 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
python实现祝福弹窗效果
Apr 07 Python
Flask-WTF表单的使用方法
Jul 12 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 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
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
详解Python命令行解析工具Argparse
2016/04/20 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Django中的文件的上传的几种方式
2018/07/23 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
送货司机岗位职责
2013/12/11 职场文书
外贸业务员工作职责
2014/01/06 职场文书
大学新生欢迎词
2014/01/10 职场文书
给校长的一封检讨书
2014/09/20 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
担保贷款承诺书
2015/04/30 职场文书
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python