只用mysql实现银行转账_基于mysql数据库银行转账功能实现
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数据库银行转账功能实现相关推荐
- mysql研究内容_基于MySQL数据库的数据管理的研究
[摘 要]MySQL 是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言,即结构化查询语言进行数据库管理.缓存管理是对于文件数据在内存中的特殊管理,基于内存管理,向 ...
- mysql geohash函数_基于MySQL实现按距离排序、范围查找geoHash
简介 现在几乎所有的O2O应用中都会存在"按范围搜素.离我最近.显示距离"等等类似的功能,那这样的功能是怎么实现的呢?本文提供了基于MySQL的实现方式,同样适用于其它数据库.本文 ...
- Mysql sequence使用_基于Mysql的Sequence实现
团队更换新框架.新的业务全部使用新的框架,甚至是新的数据库--Mysql. 这边之前一直是使用oracle,各种订单号.流水号.批次号啥的,都是直接使用oracle的sequence提供的数字序列号. ...
- mysql inet_aton 原理_基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析_MySQL
bitsCN.com 有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理. 具体可以查看官方手册. INET_ATON(expr)给出一个 ...
- MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...
- mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍
为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...
- mysql 数据日志分析_基于mysql数据库的日志分析系统
现如今,日志已经成为了我们分析系统及相关服务的一个重要工具.而日志也具有其相对较为固定的格式以便于进行统计查询.其大致格式如下: 日期时间 主机 进程[pi ...
- php 本地mysql 代码_基于本地数据库的 IP 地址查询 PHP 源码
* 纯真 IP 数据库查询 * * 参考资料: * - 纯真 IP 数据库 http://www.cz88.net/ip/ * - PHP 读取纯真IP地址数据库 http://ju.outofmem ...
- 数据库mysql建立索引_为mysql数据库建立索引
前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...
最新文章
- CentOS7中离线安装Docker与卸载
- Linux的secureCRT设置字体大小
- arrayQueue
- html5群组选择器,css选择器
- Dais-CMX系列现代计算机组成原理,01 十六位机运算器实验
- STemwin替换为MDK下的emwin
- LeetCode(237)——删除链表中的节点(JavaScript)
- Linux操作系统相关命令
- 8.性能之巅 洞悉系统、企业与云计算 --- 文件系统
- 转iOS深拷贝与浅拷贝 附NSSet讲解
- php如何隐藏入口文件,php怎么隐藏入口文件
- A Re-evaluation of Temporal Knowledge Graph Completion Models under a Unified Framework
- nginx: [emerg] could not build server_names_hash
- 小白刷LeeCode(算法篇):4
- 献给面试学生 关键字const是什么意思 ESP(译者:Embedded Systems Programming) --Dan Saks概括了const的所有用法
- java共享充电宝管理系统演示录像2021计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- ueditor如何改变图片大小等比缩放
- SQL计算日环比、周同比
- 水面倒影风格的LOGO在线做
- [转]如何修炼成某一领域的高手?