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绘制MySQL数据图实现数据可视化
Mar 30 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
python爬取网页转换为PDF文件
Jun 07 Python
python编辑用户登入界面的实现代码
Jul 16 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
Python二次规划和线性规划使用实例
Dec 09 Python
Python项目跨域问题解决方案
Jun 22 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
python线程优先级队列知识点总结
Feb 28 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中使用正则表达式提取中文实现笔记
2015/01/20 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Golang与python线程详解及简单实例
2017/04/27 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
Python使用进程Process模块管理资源
2020/03/05 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
PyTorch-GPU加速实例
2020/06/23 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
软件测试常见笔试题
2012/02/04 面试题
2014年党课学习心得体会
2014/07/08 职场文书
员工试用期自我评价
2014/09/18 职场文书
护士先进个人总结
2015/02/13 职场文书
教师节联欢会主持词
2015/07/04 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
二年级数学教学反思
2016/02/16 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server