以下代码为imooc的疯狂的蚂蚁的课程《Python操作MySQL数据库》的python3版本的代码,使用的是pymysql模块来操作mysql数据库,代码与原课程有所改动,注意运行时需要参数。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql,sys

class TransferMoney(object):
    def __init__(self,conn):
        self.conn=conn
        
    def transfer(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
        
    def check_acct_available(self,acctid):
        cursor=self.conn.cursor()
        try:        
            sql='SELECT * from account where acctid=%s'%acctid
            cursor.execute(sql)
            print('check_acct_available:',acctid)
            rs=cursor.fetchall()
            if len(rs)!=1:
                raise Exception('账号%s不存在'%acctid)
        finally:
                cursor.close()

    def has_enough_money(self,acctid,money):
        cursor=self.conn.cursor()
        try:        
            sql='SELECT * from account where acctid=%s'%acctid
            cursor.execute(sql)
            print('has_enough_money:',acctid)
            rs=cursor.fetchone()
            if rs[1]<money:
                raise Exception('账号%s金额小于%s,无法转账'%(acctid,money))
        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:',acctid,money)
            if cursor.rowcount!=1:
                raise Exception('账号%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:',acctid,money)
            if cursor.rowcount!=1:
                raise Exception('账号%s加款失败'%acctid)
        finally:
                cursor.close()

if __name__=='__main__':
    source_acctid=sys.argv[1]
    target_acctid=sys.argv[2]
    money=int(sys.argv[3])

    conn=pymysql.Connection(host='127.0.0.1',port=3306,user='root',passwd='xiang518',db='imooc',charset='utf8')
    tr_money=TransferMoney(conn)
    try:
        tr_money.transfer(source_acctid,target_acctid,money)
    except Exception as e:
        print('出现问题!'+str(e))
    finally:
        conn.close()


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐