慕课 python 操作数据库2 银行转账实例
CREATE TABLE `account` (
`acctid` int(11) DEFAULT NULL COMMENT '账户ID',
`money` int(11) DEFAULT NULL COMMENT '余额'
) ENGINE=InnoDB DEFAULT CHARSET=utf8

# coding:utf8 import MySQLdb
import sys class TransferMoney(object):
"""docstring for TransferMoney"""
def __init__(self, conn):
self.conn = conn def check_acct_avaiable(self,acctid):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid = %s" % acctid
cursor.execute(sql)
print "check_acct_avaiable:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s不存在" % acctid)
finally:
cursor.close() def has_enough_money(self,acctid,money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid = %s and money > %s" % (acctid,money)
cursor.execute(sql)
print "has_enough_money:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s没有足够的钱" % acctid)
finally:
cursor.close() def reduce_money(self,acctid,money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money - %s where acctid = %s" % (money,acctid)
cursor.execute(sql)
print "reduce_money:" + sql
if cursor.rowcount != 1:
raise Exception("账号%s减款失败" % acctid)
finally:
cursor.close() def add_money(self,acctid,money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money + %s where acctid = %s" % (money,acctid)
cursor.execute(sql)
print "add_money:" + sql
if cursor.rowcount != 1:
raise Exception("账号%s加款失败" % acctid)
finally:
cursor.close() def transfer(self,source_acctid,target_acctid,money):
try:
self.check_acct_avaiable(source_acctid)
self.check_acct_avaiable(target_acctid)
self.has_enough_money(source_acctid,money)
self.reduce_money(source_acctid,money)
self.add_money(target_acctid,money)
self.conn.commit()
except Exception, e:
self.conn.rollback()
raise e if __name__ == "__main__":
source_acctid = sys.argv[1]
target_acctid = sys.argv[2]
money = sys.argv[3] conn = MySQLdb.Connect(
host = '127.0.0.1',
port = 3306,
user = 'njczy2010',
passwd = '',
db = 'czy',
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()
正确情况:
check_acct_avaiable:select * from account where acctid = 11
check_acct_avaiable:select * from account where acctid = 12
has_enough_money:select * from account where acctid = 11 and money > 100
reduce_money:update account set money = money - 100 where acctid = 11
add_money:update account set money = money + 100 where acctid = 12
错误情况:
check_acct_avaiable:select * from account where acctid = 11
check_acct_avaiable:select * from account where acctid = 12
has_enough_money:select * from account where acctid = 11 and money > 100
出现问题 账号11没有足够的钱
慕课 python 操作数据库2 银行转账实例的更多相关文章
- 慕课 python 操作数据库
test_connection import MySQLdb conn = MySQLdb.Connect( host = '127.0.0.1', port = 3306, user = '**** ...
- Python操作数据库之 MySQL
Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...
- Python接口测试实战3(上)- Python操作数据库
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- python操作数据库之批量导入
python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...
- 零基础学Python--------第11章 使用Python操作数据库
第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...
- python操作数据库PostgreSQL
1.简述 python可以操作多种数据库,诸如SQLite.MySql.PostgreSQL等,这里不对所有的数据库操作方法进行赘述,只针对目前项目中用到的PostgreSQL做一下简单介绍,主要包括 ...
- Python学习笔记 - day11 - Python操作数据库
MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...
- 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作
孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...
随机推荐
- 微信iOS多设备多字体适配方案总结
一.背景 2014下半年,微信iOS版先后适配iPad, iPhone6/6plus.随着这些大屏设备的登场,部分用户觉得微信的字体太小,但也有很多用户不喜欢太大的字体.为了满足不同用户的需求,我们做 ...
- js函数式编程(一)-纯函数
我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文 ...
- Java微信公众号开发----关键字自动回复消息
在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点: 1. url 仍然不变,还是开发配置里的url 2. 微信采用 xml 格式传输数据 3.微信服务器传给我们的参数主要有 ...
- 【dp】守望者的逃离
妙 题目描述 恶魔猎手尤迪安野心勃勃,他背着了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快 ...
- linux系统防火墙关闭
临时关闭防火墙 #systemctl stop firewalld 永久关闭服务端防火墙 #systemctl disabled firewalld getenforce 查询状态 临时 ...
- Python入门学习笔记2:刷题
1) LeetCode 强的面试题和算法题,要求也比较高,很多国内外的码农在上面刷题.难度从easy到hard都有,而且覆盖面极广,需要你的综合实力去答题. 最简单的题比如字符串的处理有的时候也要用到 ...
- i2c_drivers个人分析
\arch\arm\mach-mx6\board-mx6q_sabresd.c static struct i2c_board_info i2c_board_info_rtc[] __initdata ...
- C#语言入门
1.基础知识 2.数据类型 3.控制语句 4.
- /dev/sda is apparently in use by the system; will not make a filesystem here!解决方法
/dev/sda is apparently in use by the system; will not make a filesystem here! 翻译:系统显然在使用,不会在这里做文件系统 ...
- IDEA字体颜色快速导入辅助工具设置
原创链接:https://www.cnblogs.com/ka-bu-qi-nuo/p/9181954.html 程序员开发大多数都是使用IDE进行代码开发的,这样能快速的开发出需要的项目.之前一直 ...