基于python3.6连接mysql,实现一个银行转账的小功能(源码)

本文介绍了一个转账功能的具体实现过程,包括检查账户有效性、验证余额充足、扣款和增加金额等步骤,并通过实例演示了如何完成从一个账户到另一个账户的安全转账。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pymysql


class TransferMoney:
    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
            cursor.execute(sql)
            print("check_acct_available"+sql)
            rs = cursor.fetchall()
            if len(rs) !=1:
                raise Exception("account %s is not exist" % acctid)
        finally:
            cursor.close()
    def has_enough_money(self,acctid,money):
        try:
            cursor = self.conn.cursor()
            sql = "select * from account where acctid = %s and money>= %s" % (acctid,money)
            cursor.execute(sql)
            print("has_enough_money" + sql)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception("account %s does't have enough money" % acctid)
        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)
            cursor.execute(sql)
            print("reduce_money" + sql)
            rs = cursor.rowcount
            if rs != 1:
                raise Exception("account %s transfer is't successful" % acctid)
        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)
            cursor.execute(sql)
            print("add_money" + sql)
            rs = cursor.rowcount
            if rs != 1:
                raise Exception("account %s transfer is't successful" % acctid)
        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_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 = pymysql.Connect(
    host = '*******',
    port =3306,
    user = 'root',
    passwd = '*************',
    db = 'python'

)
source_acctid = int(input("Input source_acctid"))
target_acctid = int(input("Input target_acctid"))
money = int(input("Input tansfer money "))
tr_money = TransferMoney(conn)
try:
    tr_money.transfer(source_acctid,target_acctid,money)
except Exception as e:
    print("raise Error"+str(e))
finally:
    conn.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值