继python(银行转账)简单Model修改版
Posted 梦子Python7762
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继python(银行转账)简单Model修改版相关的知识,希望对你有一定的参考价值。
-
解决遗留问题:各种报错的处理。安全问题主要是sql的注入放在明天处理。新手Studying!每天十分钟记录一下学习进度
-
代码主要变动就是对各个业务的封装以及变量名的命名。(看不懂请参考昨天的文章,)sql注入仍然没动,放在明天解决修改。
-
看代码吧。
#--coding=utf8--
#导模板
import sys,mysql.connector
#转账类
class TransferMoney(object):
#初始化参数
def init(self,conn):
self.conn=conn
#检查账户合法性
def check_acct_available(self,acctid):
try:
cursor=self.conn.cursor()
sql=‘select * from account where acctid =%s’% acctid
print ‘from:’,sql
cursor.execute(sql)
rs=cursor.fetchall()
if len(rs)!=1:
#往外抛异常
raise Exception(‘not has this id’)
finally:
cursor.close()
#检查账户是否有足够的钱
def has_enough_mony(self,acctid,money):
try:
cursor=self.conn.cursor()
sql=‘select * from account where acctid =%s and money>=%s’% (acctid,money)
print ‘enough:’,sql
cursor.execute(sql)
rs=cursor.fetchall()
if len(rs)!=1:
raise Exception(‘not has enough money’)
finally:
cursor.close()
#转出
def reduce_money(self,acctid,money):
try:
cursor=self.conn.cursor()
sql=‘update account set money=money-%s where acctid=%s’% (money,acctid)
print ‘reduce:’,sql
cursor.execute(sql)
if cursor.rowcount!=1:
raise Exception(‘resuce fail’)
finally:
cursor.close()
#转入
def add_money(self,acctid,money):
try:
cursor=self.conn.cursor()
sql=‘update account set money=money+%s where acctid=%s’% (money,acctid)
print ‘add:’,sql
cursor.execute(sql)
if cursor.rowcount!=1:
raise Exception(‘add fail’)
finally:
cursor.close()
#转账操作的方法,放在一个事务中,失败则进行回滚操作
def transfer(self,source_acctid,target_acctid,money):
try:
self.check_acct_available(source_acctid)
self.check_acct_available(target_acctid)
self.has_enough_mony(source_acctid,money)
self.reduce_money(source_acctid,money)
self.add_money(target_acctid,money)
self.conn.commit()
print ‘success’
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=mysql.connector.connect(
user=‘root’,
password=‘123456’,
database=‘bank’,
charset=‘utf8’,
use_unicode=True
)
#实例化类
tr_money=TransferMoney(conn)
try:
#调用转账方法
tr_money.transfer(source_acctid,target_acctid,money)
except Exception as e:
print str(e)
finally:
conn.close()
你要不要也来试试,用 Python 测测你和女神的颜值差距(仅供娱乐,请勿联想) 如果真的遇到好的同事,那算你走运,加油,抓紧学到手。
python、爬虫技巧资源分享Q群:766610200
包含python, pythonweb、爬虫、数据分析等Python技巧,以及人工智能、大数据、数据挖掘、自动化办公等的学习方法。
打造从零基础到项目开发上手实战全方位解析!
点击:加入
以上是关于继python(银行转账)简单Model修改版的主要内容,如果未能解决你的问题,请参考以下文章
手写实现自定义简易版Spring (实现IoC 和 AOP)
手写实现自定义简易版Spring (实现IoC 和 AOP)