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操作日期和时间的方法
Mar 11 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python unittest单元测试框架总结
Sep 08 Python
python 实现UTC时间加减的方法
Dec 31 Python
Numpy之random函数使用学习
Jan 29 Python
使用Python制作一个打字训练小工具
Oct 01 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 Python
python数字转对应中文的方法总结
Aug 02 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 - Html Transfer Code
2006/10/09 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
网络工程师职业规划
2014/02/10 职场文书
外国人聘用意向书
2014/04/01 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
公司合作协议范文
2014/10/01 职场文书
2014年生产部工作总结
2014/12/17 职场文书
房屋维修申请报告
2015/05/18 职场文书
奠基仪式致辞
2015/07/30 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
导游词之青城山景区
2019/09/27 职场文书
导游词之神仙居景区
2019/11/15 职场文书
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL