简单的MySQL银行转账实例

本小鱼这个星期在学习MySQL数据库,完全是从零开始,从下载MySQL安装包,到MySQL的安装,到MySQL的基础知识的学习,到搭建数据库开发环境,一直到现在实现简单的实例。是一步一个脚印。
今天就由小鱼来和大家分享一个利用python来操作MySQL数据库的银行转账实例。
开发环境要求:电脑已安装MySQL软件(小鱼安装的是mysql-installer-community-5.7.20.0版本),安装MySQL图形化管理工具(小鱼安装的是Navicat),安装Python2.7,安装python-mysqlconnector插件(小鱼使用的是pymysql),安装python代码编辑器(小鱼使用的是eclipse+pydev,你们方便的话也可以使用pycharm,看个人喜好)。
python2.7的安装网上都有,当然有问题可以问我。
[mysql官网下载链接](https://dev.mysql.com/downloads/mysql/)
[Navicat安装包](http://pan.baidu.com/s/1jI3nV62)
下载python-mysql连接器插件(确定自己已安装python):
1、打开cmd
2、输入 pip install pymysql
3、等待下载就好
4、直接import pymysql看是否安装成功


接下来小鱼假设你们环境都已搭建好,MySQL的基础知识也有,没有也不用怕,小鱼在后面的博客将介绍MySQL的基础知识。现在开始银行转账实例演示。

首先分析银行转账流程:
开始事务->检查账户A和账户B是否可用—>检查账户A账户是否有足够金额,比如转出100元->账户A减去100,账户B加上100->提交事务

流程分析完毕,开始编写代码。
1、pymysql中在test数据库下创建account数据表,有账户ID和余额两字段
USE test;
CREATE TABLE account (
  id TINYINT(3) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  acctid VARCHAR(10) NOT NULL COMMENT '账户id',
  money SMALLINT(10) DEFAULT NULL COMMENT '余额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、在表中先写入两个字段
INSERT account(acctid,money) VALUES('A','110');
INSERT account(acctid,money) VALUES('B','110');
我们可以使用`SHOW * FROM account`查看表中内容。

3、使用代码编辑器编写转账代码
import sys
import pymysql
class TransferMoney(object):
    def __init__(self,conn):
        self.conn=conn
    def transfer(self,source_acctid,target_acctid,money)
        try:
            self.check_acct_availiable(source_acctid)
            self.has_enough_money(target_acctid)
            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',port=3306,user='root',passwd='123456',db='test',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
到这里,框架已经搭建好了,现在只要将定义的函数编写就可以了。
小鱼这里只实现检测用户是否可用的函数,剩下的三个函数和这个函数差不多,大家可用自己尝试编一下,如果不会,或者有问题,可以和我一起讨论。
def check_acct_available(self,acctid):
cursor=self.conn.cursor()
try:
    sql="select * from account where acctid=%s" %acctid
    cuesor.execute(sql)
    print "check_acct_available: "+sql
    rs=curson.fetchall()
    if len(rs)!=1:
        raise Exception("账号%s不存在" %acctid)
    finally:
        cursor.close
好啦,今天小鱼就分享到这啦,自己尝试编写一下后面的三个函数哦,有问题再讨论。
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值