代码演示:

 #conding:utf8
import pymysql
import sys class TransferMoney(object):
def __init__(self,conn):
self.conn=conn
def check_acct_available(self,acctid):
cursor = self.conn.cursor()
try:
cursor=self.conn.cursor()
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:
cursor = self.conn.cursor()
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:
cursor = self.conn.cursor()
sql = "update account set money = money-%s where acctid=%s" % (money,acctid)
cursor.execute(sql)
print("reduce_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount!=1:
raise Exception("账号%s减款失败:" % acctid)
finally:
cursor.close() def add_money(self,acctid,money):
cursor = self.conn.cursor()
try:
cursor = self.conn.cursor()
sql = "update account set money = money+%s where acctid=%s" % (money, acctid)
cursor.execute(sql)
print("add_money:" + sql)
rs = cursor.fetchall()
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__":
'''付款人账号id,收款人账号id,转账金额'''
source_acctid=sys.argv[1]
target_acctid=sys.argv[2]
money=sys.argv[3]
conn=pymysql.connect(
host='192.168.199.249',
port=3306,
user='root',
passwd='',
db='imooc',
charset='utf8'
)
tr_money=TransferMoney(conn) try:
tr_money.transfer(source_acctid,target_acctid,money)
except Exception as e:
print("出现问题:"+str(e))
finally:
conn.close()

四.mysql演示银行转账的更多相关文章

  1. 用Navicat连接数据库-数据库连接(MySQL演示)

    用Navicat连接数据库-数据库连接(MySql演示) 已成功连接,连接方式步骤如下: 开始之前首先准备连接信息: [ 一般你可以自己去配置文件中找 或者 问连接过该数据库的人/所有者(负责人/同学 ...

  2. php整理(四): mysql

    PHP学习(四)---PHP与数据库MySql 主要有以下的内容: 1.怎么连接数据库 2.怎么操作数据库 (1)怎么执行sql语言 (2)怎么处理返回的结果集 方法一:面向过程(已经过时,只是了解) ...

  3. Swift3.0服务端开发(四) MySQL数据库的连接与操作

    本篇博客我们来聊聊MySQL数据库的连接与操作.如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库.在Mac OS中使用brew包管理器进行MySQL的安装是及其方便的.安装MySQL的 ...

  4. 中文命名之Hibernate+MySQL演示

    最近有个契机, 需要在一个给定开发环境中验证中文命名的可行性. 达成的例子源码在: HibernateExampleZh 当前用的是Hibernate 3.3.2.GA. 之后测试了更多版本, 彩蛋见 ...

  5. 四 mysql之单表查询

    目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 1. 什么是分组?为什么要分组? 2. ONLY_FULL_GROUP_BY ...

  6. Java基础学习笔记二十四 MySQL安装图解

    .MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Compl ...

  7. mysql进阶(四)mysql中select

    mysql中select * for update 注:  FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效. 作用 锁定该语句所选择到的对象.防止在 ...

  8. 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常

    基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...

  9. Redis 学习笔记四 Mysql 与Redis的同步实践

    一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文 ...

随机推荐

  1. android - px(像素)、dpi(像素密度)、dip(密度无关像素)之间的关系

    使用ImageView会遇到的问题 在Android应用中,都少不了图片的显示,ImageView,轮播图,ViewPager等等,很多都是来显示图片的,很多时候,我们都希望图片能够在宽度上填充父窗体 ...

  2. JSON 常用数据转换

    #endregion #region Json字符串转换为DataTable 实例方法 public DataTable JsonToDataTable(json) { DataTable dt= T ...

  3. python学习之platform模块

    该模块用来访问平台相关属性. 常见属性和方法 平台架构 platform.machine() 返回平台架构.若无法确定,则返回空字符串. >>> platform.machine() ...

  4. mysql之mysql、mysql-devel、mysql-server

    一.引言 一直都没搞明白这三者之间的关系,于是决心查资料把这个问题搞明白,遂记录以便查阅.学习 二.关系 mysql-devel 开发用到的库以及包含文件mysql mysql 客户端mysql-se ...

  5. JavaScript变量的生命周期

    最近看国外经典教材的时候发现JavaScript与熟知的Java,C,C++都不同的特性,其中一个就是变量的生命周期.   1.在JavaScript中,对于for循环中定义的i变量,其生命周期在循环 ...

  6. js将秒数换算成时分秒

    转载自:http://jingyan.baidu.com/article/375c8e19a0413925f2a229d2.html <script language="javascr ...

  7. 安装 RabbitMQ (WINDOWS)

    基础知识: RabbitMQ 是一个开源的MQ,使用  Erlang 写成. MQ 全称是Message Queue (消息队列), 是一种应用程序对应用程序的通信方法.通过消息队列,应用程序之间可以 ...

  8. xml传输过程中中文乱码

    ------------------------------------------request:----------------------------------------------- pu ...

  9. Container类是Component的子类,它也是一个抽象类,它允许其他的组件(Component)加入其中

    在AWT中,所有能在屏幕上显示的组件(component )对应的类,均是 抽象类 Component 的子类或子孙类. 这些类均可继承Component类的变量和方法. Container类是Com ...

  10. SPAF模板

    #include <iostream> #include <cstring> #include <queue> #include <cstdio> #d ...