import pymysql

class TransferMoney(object):

# 构造方法

def __init__(self, conn):

self.conn = conn

self.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)

if res_count == 1:

return True

else:

# raise Exception("账户%s不存在" %(acc_id))

return False

def 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) # ((1, 500), )

# 获取查询到的金额钱数;

acc_money = self.cur.fetchone()[0]

# 判断

if acc_money >= money:

return True

else:

return False

def 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()

if __name__ == '__main__':

# 1. 连接数据库,

conn = pymysql.connect(

host='localhost',

user='root',

password='redhat',

db='helloTest',

charset='utf8',

autocommit=True, # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。

)

trans = TransferMoney(conn)

# assert trans.check_account_avaialbe(14255632) == False

# assert trans.check_account_avaialbe(13997) == True

#

#

# assert trans.has_enough_money(13997, 800) == False

# assert trans.has_enough_money(13998, 700) == True

# trans.add_money(13998, 200)

# trans.reduce_money(13998, 200)

# # trans.transfer(12567, 16787, 100)

# trans.transfer(13997, 13998, 200)

只用mysql实现银行转账_基于mysql数据库银行转账功能实现相关推荐

  1. mysql研究内容_基于MySQL数据库的数据管理的研究

    [摘 要]MySQL 是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言,即结构化查询语言进行数据库管理.缓存管理是对于文件数据在内存中的特殊管理,基于内存管理,向 ...

  2. mysql geohash函数_基于MySQL实现按距离排序、范围查找geoHash

    简介 现在几乎所有的O2O应用中都会存在"按范围搜素.离我最近.显示距离"等等类似的功能,那这样的功能是怎么实现的呢?本文提供了基于MySQL的实现方式,同样适用于其它数据库.本文 ...

  3. Mysql sequence使用_基于Mysql的Sequence实现

    团队更换新框架.新的业务全部使用新的框架,甚至是新的数据库--Mysql. 这边之前一直是使用oracle,各种订单号.流水号.批次号啥的,都是直接使用oracle的sequence提供的数字序列号. ...

  4. mysql inet_aton 原理_基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析_MySQL

    bitsCN.com 有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理. 具体可以查看官方手册. INET_ATON(expr)给出一个 ...

  5. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  6. mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...

  7. mysql 数据日志分析_基于mysql数据库的日志分析系统

    现如今,日志已经成为了我们分析系统及相关服务的一个重要工具.而日志也具有其相对较为固定的格式以便于进行统计查询.其大致格式如下: 日期时间            主机            进程[pi ...

  8. php 本地mysql 代码_基于本地数据库的 IP 地址查询 PHP 源码

    * 纯真 IP 数据库查询 * * 参考资料: * - 纯真 IP 数据库 http://www.cz88.net/ip/ * - PHP 读取纯真IP地址数据库 http://ju.outofmem ...

  9. 数据库mysql建立索引_为mysql数据库建立索引

    前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...

最新文章

  1. CentOS7中离线安装Docker与卸载
  2. Linux的secureCRT设置字体大小
  3. arrayQueue
  4. html5群组选择器,css选择器
  5. Dais-CMX系列现代计算机组成原理,01 十六位机运算器实验
  6. STemwin替换为MDK下的emwin
  7. LeetCode(237)——删除链表中的节点(JavaScript)
  8. Linux操作系统相关命令
  9. 8.性能之巅 洞悉系统、企业与云计算 --- 文件系统
  10. 转iOS深拷贝与浅拷贝 附NSSet讲解
  11. php如何隐藏入口文件,php怎么隐藏入口文件
  12. A Re-evaluation of Temporal Knowledge Graph Completion Models under a Unified Framework
  13. nginx: [emerg] could not build server_names_hash
  14. 小白刷LeeCode(算法篇):4
  15. 献给面试学生 关键字const是什么意思 ESP(译者:Embedded Systems Programming) --Dan Saks概括了const的所有用法
  16. java共享充电宝管理系统演示录像2021计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  17. ueditor如何改变图片大小等比缩放
  18. SQL计算日环比、周同比
  19. 水面倒影风格的LOGO在线做
  20. [转]如何修炼成某一领域的高手?

热门文章

  1. 给datatable添加序号列
  2. Linux下最全的redis安装教程
  3. 【程序设计】程序错误与异常处理
  4. vue中拿到接口,并获取数据,渲染到页面
  5. 2020年浙江理工大学新生赛 D DD_BOND看到的hcy
  6. 前端遇到的那些技术难点
  7. 哈工程自考计算机应用数学,自考本科计算机应用数学 01332
  8. 学习笔记-如何设计离线跑批系统
  9. 华为又一黑科技:AR高精地图服务即将上线
  10. mql4 mysql_MQL4的几个常用函数