简单的MySQL银行转账实例

你的名字 2022-06-05 10:35 432阅读 0赞
  1. 本小鱼这个星期在学习MySQL数据库,完全是从零开始,从下载MySQL安装包,到MySQL的安装,到MySQL的基础知识的学习,到搭建数据库开发环境,一直到现在实现简单的实例。是一步一个脚印。
  2. 今天就由小鱼来和大家分享一个利用python来操作MySQL数据库的银行转账实例。
  3. 开发环境要求:电脑已安装MySQL软件(小鱼安装的是mysql-installer-community-5.7.20.0版本),安装MySQL图形化管理工具(小鱼安装的是Navicat),安装Python2.7,安装python-mysqlconnector插件(小鱼使用的是pymysql),安装python代码编辑器(小鱼使用的是eclipse+pydev,你们方便的话也可以使用pycharm,看个人喜好)。
  4. python2.7的安装网上都有,当然有问题可以问我。
  5. [mysql官网下载链接](https://dev.mysql.com/downloads/mysql/)
  6. [Navicat安装包](http://pan.baidu.com/s/1jI3nV62)
  7. 下载python-mysql连接器插件(确定自己已安装python):
  8. 1、打开cmd
  9. 2、输入 pip install pymysql
  10. 3、等待下载就好
  11. 4、直接import pymysql看是否安装成功
  12. 接下来小鱼假设你们环境都已搭建好,MySQL的基础知识也有,没有也不用怕,小鱼在后面的博客将介绍MySQL的基础知识。现在开始银行转账实例演示。
  13. 首先分析银行转账流程:
  14. 开始事务->检查账户A和账户B是否可用—>检查账户A账户是否有足够金额,比如转出100元->账户A减去100,账户B加上100->提交事务
  15. 流程分析完毕,开始编写代码。
  16. 1pymysql中在test数据库下创建account数据表,有账户ID和余额两字段
  17. USE test
  18. CREATE TABLE account (
  19. id TINYINT(3) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  20. acctid VARCHAR(10) NOT NULL COMMENT '账户id',
  21. money SMALLINT(10) DEFAULT NULL COMMENT '余额',
  22. PRIMARY KEY (`id`)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  24. 2、在表中先写入两个字段
  25. INSERT account(acctid,money) VALUES('A','110');
  26. INSERT account(acctid,money) VALUES('B','110');
  27. 我们可以使用`SHOW * FROM account`查看表中内容。
  28. 3、使用代码编辑器编写转账代码
  29. import sys
  30. import pymysql
  31. class TransferMoney(object):
  32. def __init__(self,conn):
  33. self.conn=conn
  34. def transfer(self,source_acctid,target_acctid,money)
  35. try:
  36. self.check_acct_availiable(source_acctid)
  37. self.has_enough_money(target_acctid)
  38. self.reduce_money(source_acctid,money)
  39. self.add_money(target_acctid,money)
  40. self.conn.commit()
  41. except Exception as e:
  42. self.conn.rollback()
  43. raise e
  44. if __name__=="__main__":
  45. source_acctid = sys.argv[1]
  46. target_acctid = sys.argv[2]
  47. money = sys.argv[3]
  48. conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='123456',db='test',charset='utf8')
  49. tr_money=TransferMoney(conn)
  50. try:
  51. tr_money.transfer(source_acctid,target_acctid,money)
  52. except Exception as e:
  53. print "出现问题: "+str(e)
  54. finally:
  55. conn.close
  56. 到这里,框架已经搭建好了,现在只要将定义的函数编写就可以了。
  57. 小鱼这里只实现检测用户是否可用的函数,剩下的三个函数和这个函数差不多,大家可用自己尝试编一下,如果不会,或者有问题,可以和我一起讨论。
  58. def check_acct_available(self,acctid):
  59. cursor=self.conn.cursor()
  60. try:
  61. sql="select * from account where acctid=%s" %acctid
  62. cuesor.execute(sql)
  63. print "check_acct_available: "+sql
  64. rs=curson.fetchall()
  65. if len(rs)!=1:
  66. raise Exception("账号%s不存在" %acctid)
  67. finally:
  68. cursor.close
  69. 好啦,今天小鱼就分享到这啦,自己尝试编写一下后面的三个函数哦,有问题再讨论。

发表评论

表情:
评论列表 (有 0 条评论,432人围观)

还没有评论,来说两句吧...

相关阅读