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程序设计入门(3)数组的使用
Jun 16 Python
Python操作列表之List.insert()方法的使用
May 20 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
python实现石头剪刀布程序
Jan 20 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 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+mysql写的留言本
2006/10/09 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php数组去重复数据示例
2014/02/25 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
python条件和循环的使用方法
2013/11/01 Python
python编写简单爬虫资料汇总
2016/03/22 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
外企测试工程师面试题
2015/02/01 面试题
产品售后服务承诺书
2014/05/21 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
获奖感言一句话
2015/07/31 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
24年收藏2000多部退役军用电台
2022/02/18 无线电