银行转账系统建(结合)数据库

检查用户是否可用,然后检查源账户是否有足够的金额,然后减少源帐户money数量的金额,目标用户增加money的数量,最后提交事务,如果出现错误,那么返回转账前的状态,两个账户金额没有改变。

对于支持事务的数据库,在python数据库的编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
“”"

import pymysqlclass TransferMoney(object):# 构造方法def __init__(self,conn):self.conn = connself.cur = conn.cursor()def transfer(self,source_id,target_id,money):# 1.判断两个银行卡号是否存在# 2.判断source_id是否有足够的钱# 3.source_id扣钱# 4.target_id加钱if not self.check_account_avaialbe(source_id):raise  Exception("账户不存在")if not self.check_account_avaialbe(target_id):raise  Exception("账户不存在")if self.has_enough_money(source_id, money):try:self.reduce_money(source_id, money)self.add_money(target_id, money)except Exception as e:print("转账失败:", e)self.conn.rollback()else:self.conn.commit()print("%s给%s转账%s金额成功" % (source_id,target_id, money))def check_account_avaialbe(self, acc_id):"""判断帐号是否存在, 传递的参数是银行卡号的id"""select_sqli = "select * from bankData where id=%d;" % (acc_id)print("execute sql:", select_sqli)res_count = self.cur.execute(select_sqli)# res_count:返回数据记录数,只要有一条记录存在,# 就证明账户存在if res_count == 1:return Trueelse:return Falsedef has_enough_money(self, acc_id, money):"""判断acc_id账户上金额> money"""# 查找acc_id存储金额?select_sqli = "select money from bankData where id=%d;" % (acc_id)print("execute sql:", select_sqli)self.cur.execute(select_sqli)  # ((100, 100), )# 获取查询到的金额钱数# acc_moneys = self.cur.fetchone()# print(acc_moneys)acc_money = self.cur.fetchone()[0]print(acc_money)# 判断if acc_money >= money:return Trueelse:return Falsedef add_money(self, acc_id, money):update_sqli = "update bankData set money=money+%d  where id=%d" % (money, acc_id)print("add money:", update_sqli)self.cur.execute(update_sqli)def reduce_money(self, acc_id, money):update_sqli = "update bankData set money=money-%d  where id=%d" % (money, acc_id)print("reduce money:", update_sqli)self.cur.execute(update_sqli)# 析构方法def __del__(self):self.cur.close()self.conn.close()# 1. 连接数据库,
conn = pymysql.connect(host='localhost',user='root',password='redhat',db='westos',charset='utf8',autocommit=True,    # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
trans = TransferMoney(conn)
#trans.add_money(100,200)# trans.transfer(100,200,10)
#trans.has_enough_money(100,270)

test

"""
把测试内容不被别人看
你写好的类别人也可以运行,不会有杂七杂八的东西
注意:写好的类的文件名称应该是test,另一个文件可以直接import test导入文件
"""
def hello():print('hello')#hello()
#print(__name__)
if __name__ == '__main__':hello()#外部框架flask
#把代码放在网上


python-银行转账系统的简单实现及test相关推荐

  1. python操作MySQL 模拟简单银行转账操作

    一.基础知识 1.MySQL-python的安装 下载,然后 pip install 安装包 2.python编写通用数据库程序的API规范 (1).数据库连接对象 connection,建立pyth ...

  2. python使用redis在实际场景使用_Python使用Redis实现作业调度系统(超简单)

    概述 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁 ...

  3. python 3.6.5 模拟银行转账系统

    1. 创建数据库并构造表 acctid用来标识账户 money用来标注账户的金额 可以查看一下表的结构 更加直观 2. 插入两个账户的数据并查看表中存储的内容 可以看到在1号户中存储了300,在2号中 ...

  4. 利用mysql模拟银行转账_实践项目七:模拟银行转账系统(python+mysql)

    环境:ubutu 16.04 + python2.7 + mysql 5.7.19 最近学习python操作mysql数据库的知识,python访问数据库有自己的统一接口程序:Python DB AP ...

  5. python的变量和简单的数据类型

    决定学习python这门语言了,本人资质愚钝,只会把学到的东西记录下来,供自己查漏补缺,也可以分享给和我一样正在学习python语言的人,若在记录中存在什么错误,希望多多批评指正,谢谢. Python ...

  6. 怎么进入python官网-Python的安装及简单的使用

    原标题:Python的安装及简单的使用 像我们想要抓住一门好的编程语言,如何开始学习呢?我来简单介绍下python Python特性:语法简单,入门上手快,很多女神也在学习,方便找个编程的妹纸---- ...

  7. python系统-python做系统

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 在linux操作系统上编写shell脚本时, 主要涉及到执行系统命令, ...

  8. python可以做什么系统-python什么系统

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 在linux操作系统上编写shell脚本时, 主要涉及到执行系统命令, ...

  9. 大学python和vb哪个简单-python和vb哪个简单

    Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种可用于 ...

  10. php和python哪个学起来简单一点-python和php哪个容易学

    python和PHP的难易程度并没有明确的界限,如果是零基础的小白,建议学php会好一些,原因大公司小公司创业公司非互联网公司,都会用到php,python都是大公司在用 或互联网公司在用以你目前的背 ...

最新文章

  1. c语言字符串机考题,2016全国计算机二级《C语言》机考试题及答案
  2. 域名解析对网站SEO优化有何影响?
  3. PIC单片机入门_异步通讯模式详解
  4. UDP接收端和发送端_Socket编程
  5. Spring Boot Servlet
  6. php开发支付宝支付密码忘记了怎么办_密码箱忘记密码怎么办?密码箱解锁方法大全...
  7. UESTC 1636 梦后楼台高锁,酒醒帘幕低垂
  8. 华为云服务产品之精华问题大集烩(四)
  9. 跟着辛星用PHP的反射机制来实现插件
  10. sql server 排名函数:DENSE_RANK
  11. 制作删不掉的php唯读档,ppt母版logo删除不了怎么办
  12. 美团饿了么外卖推广联盟导航的小程序实现推广无力时候该不该卖掉变现
  13. matlab亚式 期权定价,MATLAB在幂型几何亚式期权定价中的应用
  14. 智能操控装置在高压开关柜中的应用
  15. 灌注和宝石性道法价比分析
  16. (result, consumed) = self._buffer_decode(data, self.errors, final)
  17. Zedboard(一)开发环境Vivado
  18. windows 录屏软件
  19. Android Spans介绍(转)
  20. 人脸识别技术的简单认识(含原理)

热门文章

  1. 天正编辑文字出现形未定义_天正双击不能编辑文字
  2. 1. 测度论-概率空间的基本概念
  3. 计算机64位地址总线,地址总线与数据总线的关系,功能和宽度
  4. 实体机黑苹果安装教程
  5. NAT穿透技术、穿透原理和方法详解
  6. CIS Benchmarks
  7. kmeans聚类算法python实现_Python实现Kmeans聚类算法
  8. riot修改服务器,riot改地区教程
  9. unity材质球发光_为Unity3D创建素材(1):图片、着色器、材质球
  10. 阿里巴巴大数据之路-大数据领域建模综述