#coding=utf-8
import sys
import MySQLdb
'''''
python操作MySQL数据库,模拟银行转账
'''
class Trans_for_Money(object):
#初始化 类
def __init__(self,conn):
self.conn = conn
#### 1、检查所输入的账号是否存在 ####
def check_acct_available(self,source_acctid):
#使用与数据库的链接并返回游标
cursor=self.conn.cursor()
try:
#数据库命令
sql="select * from tr_money where acctid=%s" %source_acctid
#执行命令
cursor.execute(sql)
#为方便观察执行过程
print "check_acct_available:" + sql
#讲结果集放入变量result中,若result不等于1,则没有这个账号,输出异常
result=cursor.fetchall()
if len(result)!=1:
raise Exception("账号%s不存在" %source_acctid)
finally:
#若过程出现问题,仍需要关闭游标对象
cursor.close()
#### 2、检查减款人余额是否充足,方法与上一个函数一样,只是多加了一个money参数 ###
def has_enough_money(self,source_acctid,money):
cursor=self.conn.cursor()
try:
sql="select * from tr_money where acctid=%s and money>%s" %(source_acctid,money)
cursor.execute(sql)
print "has_enough_money:" + sql
result=cursor.fetchall()
if len(result)!=1:
raise Exception("账号%s余额不足" %source_acctid)
finally:
cursor.close()
#### 3、减款操作 ###
def reduce_money(self,source_acctid,money):
cursor=self.conn.cursor()
try:
#数据库命令,减去对应减款人的金额数
sql="update tr_money set money=money-%s where acctid=%s" %(money,source_acctid)
cursor.execute(sql)
print "reduce_money:" + sql
#操作的execute()数据行数不等于1则减款失败
if cursor.rowcount!=1:
raise Exception("账号%s减款失败" %source_acctid)
finally:
cursor.close()
#### 4、收款操作,与减款方法相同 ###
def add_money(self,target_acctid,money):
cursor=self.conn.cursor()
try:
sql="update tr_money set money=money+%s where acctid =%s" %(money,target_acctid)
cursor.execute(sql)
print "add_money:" + sql
if cursor.rowcount!=1:
raise Exception("账号%s收款失败" %target_acctid)
finally:
cursor.close()
#### 5、分别传入参数,代入上方函数,执行操作 ###
def trans_for(self,source_acctid,target_acctid,money):
try:
self.check_acct_available(source_acctid)
self.check_acct_available(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='12345678',
db='tt',
charset='utf8'
)
#手动输入减款人、收款人、转款数
source_acctid=raw_input("请输入减款人: ")
target_acctid=raw_input("请输入收款人: ")
money=raw_input("请输入转款数: ")
#将参数传入类中
tr_money=Trans_for_Money(conn)
try:
tr_money.trans_for(source_acctid,target_acctid,money)
except Exception as e:
print"出现问题:"+str(e)
finally:
conn.close()
#关闭链接
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有