#coding=utf-8
import sys
import MySQLdb class TransferMoney(object):
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 account:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("account %s illega" % 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("account %s not enough money" % 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("reduce money fail %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("add money fail %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 as 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='root',passwd='',db='test',charset='utf8')
tr_money = TransferMoney(conn) try:
tr_money.transfer(source_acctid,target_acctid,money)
except Exception as e:
print "Happen:" + str(e)
finally:
conn.close()

最新文章

  1. 命名sql数据集
  2. 安装CentOS、Linux系统时,GPT分区不能引导的解决方法
  3. 基于STM32Cube的ADC模数采样设计
  4. 改变TableView中的分割线位置
  5. ubuntu系统 用户进入后命令行只有一个“$” 美元符号
  6. win7(32/64)+apache2.4+php5.5+mysql5.6 环境搭建配置
  7. 怎么书写高质量jQuery代码
  8. SDUT 3340 数据结构实验之二叉树一:树的同构
  9. android(9)_数据存储和访问3_scard基本介绍
  10. javascript 之Function对象的apply(),call(),bind(),方法和arguments,caller,length属性
  11. ID3算法(Java实现)
  12. [LeetCode] Coin Path 硬币路径
  13. 获取当前操作系统的ip
  14. 机器学习算法的调试---梯度检验(Gradient Checking)
  15. Decorator装饰者模式(结构型模式)
  16. U3D教程宝典之两步实现超实用的XML存档
  17. iOS应用开发最佳实践
  18. 第七篇:使用 CUDA 进行计算优化的两种思路
  19. python文件名不要跟模块名相同,报错AttributeError: 'module' object has no attribute 'Differ'
  20. Linux 入门记录:十七、Linux 命令行文本/文件处理工具

热门文章

  1. Fiddler: 如何抓取HTTPS协议的网页
  2. DateUtils时间单元说明
  3. nginx 代理flask应用的uwsgi配置
  4. SpringBoot项目单元测试
  5. Office_PPT_让你一分钟完成上百张图片的快速保存
  6. 《企业IT架构转型之道》读书笔记
  7. [UE4]Native Widget Host
  8. window 10 专业版激活|win 10专业版激活码
  9. 2-zookeeper、ha
  10. JavaScript中B继承A的方法