本小鱼这个星期在学习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
好啦,今天小鱼就分享到这啦,自己尝试编写一下后面的三个函数哦,有问题再讨论。