继python(银行转账)简单Model修改版(二)

  1. 解决遗留问题:各种报错的处理。安全问题主要是sql的注入放在明天处理。新手Studying!每天十分钟记录一下学习进度

  2. 代码主要变动就是对各个业务的封装以及变量名的命名。(看不懂请参考昨天的文章,)sql注入仍然没动,放在明天解决修改。

  3. 看代码吧。

继python(银行转账)简单Model修改版(二)_第1张图片

继python(银行转账)简单Model修改版(二)_第2张图片

继python(银行转账)简单Model修改版(二)_第3张图片

  • #--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()

image

你要不要也来试试,用 Python 测测你和女神的颜值差距(仅供娱乐,请勿联想) 如果真的遇到好的同事,那算你走运,加油,抓紧学到手。
python、爬虫技巧资源分享Q群:766610200
包含python, pythonweb、爬虫、数据分析等Python技巧,以及人工智能、大数据、数据挖掘、自动化办公等的学习方法。
打造从零基础到项目开发上手实战全方位解析!
点击:加入

你可能感兴趣的:(python,数据分析,爬虫,数据挖掘,人工智能,python,jdbc,封装)