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多线程实例教程
Sep 06 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
PyQt5固定窗口大小的方法
Jun 18 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
关于tf.reverse_sequence()简述
Jan 20 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
python实现取余操作的简单实例
Aug 16 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 Python
python安装mysql的依赖包mysql-python操作
Jan 01 Python
Python爬虫之Selenium库的使用方法
Jan 03 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 遍历文件实现代码
2011/05/04 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
python3实现SMTP发送邮件详细教程
2018/06/19 Python
对Python中plt的画图函数详解
2018/11/07 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
python ftplib模块使用代码实例
2019/12/31 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
大学四年学习的自我评价分享
2013/12/09 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
开学典礼主持词
2014/03/19 职场文书
护士自我鉴定总结
2014/03/24 职场文书
创先争优活动心得体会
2014/09/04 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
前台接待岗位职责
2015/02/03 职场文书
单位接收证明格式
2015/06/18 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技