python 流程模拟_模拟一个银行转账流程的Python小程序

这是一个使用Python和MySQL数据库实现转账功能的代码示例。类`TransferMoney`包含了检查账户可用性、余额是否足够、减少源账户金额和增加目标账户金额的方法。在主函数中,接收命令行参数进行转账操作,并处理可能出现的异常。

'''

Created on 2017-1-11

@author: vcc

'''

#codeing:utf8

import sys

import MySQLdb

class TransferMoney(object):

def __init__(self,conn):

self.conn = conn

def check_account_avaliable(self, source_id):

cursor=self.conn.cursor()

try:

sql = "select * from acount where acount_id = %s"%source_id

cursor.execute(sql)

rs=cursor.fetchall()

print sql

if len(rs) !=1:

raise Exception("dont have this acount")

finally:

cursor.close()

def reduce_money(self, money,source_id):

cursor=self.conn.cursor()

try:

sql = "update acount set money=money-%s where acount_id=%s"%(money,source_id)

cursor.execute(sql)

#rs=cursor.fetchall()

print sql

if cursor.rowcount !=1:

raise Exception("transfer  failed")

finally:

cursor.close()

def check_have_enoughmoney(self, source_id, money):

cursor=self.conn.cursor()

try:

sql="select * from acount where acount_id = %s and money >%s "%(source_id,money)

cursor.execute(sql)

rs=cursor.fetchall()

print sql

if len(rs) !=1:

raise Exception(" your money isnt enough")

finally:

cursor.close()

def add_money(self, money, target_id):

cursor=self.conn.cursor()

try:

sql = "update acount set money=money+%s where acount_id=%s"%(money,target_id)

cursor.execute(sql)

#rs=cursor.fetchall()

print sql

if cursor.rowcount !=1:

raise Exception("tansfer failed")

finally:

cursor.close()

def transfer(self,source_id,target_id,money):

try:

self.check_account_avaliable(source_id)

self.check_account_avaliable(target_id)

self.check_have_enoughmoney(source_id,money)

self.reduce_money(money,source_id)

self.add_money(money,target_id)

self.conn.commit()

except Exception as e:

self.conn.rollback()

raise e

if __name__ == "__main__":

source_id = sys.argv[1]

target_id = sys.argv[2]

money = sys.argv[3]

conn=MySQLdb.connect(host = 'localhost',

port = 3306,

user = 'root',

passwd = 'yangqi199474',

db = 'test',

charset = 'utf8')

tr_money=TransferMoney(conn)

try:

tr_money.transfer(source_id,target_id,money)

except Exception as e:

print str(e)

finally:

conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值