Python连接pymysql库实现简单的转账功能

学习Python和数据库的时候,总想找些实例练手,但是又很难找到自己想做的项目和案例,其实案例就在我们生活中,下面分享一下Python实现简单转账功能的代码。供大家参考。

#-*-coding:utf-8-*-
'''
建表
create database imooc;
create table account(
    acctid INT (11) DEFAULT NULL COMMENT '账户ID',
    money INT (11) DEFAULT NULL COMMENT '余额'
) ENGINE = INNODB DEFAULT CHARSET = utf8;
新建两个账户:
10  100
20  20
'''

import pymysql
import sys

class TransferMoney(object):
    """docstring for TransferMoney"""
    def __init__(self, conn):
        self.conn = conn
    #检查账户
    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:" + sql
            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 and money>%s"%(acctid, money)
            cursor.execute(sql)
            print "has_enough_money:" + sql
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception("账号%s没有足够的钱"% acctid)
        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:" + sql
            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:" + sql
            if cursor.rowcount != 1:
                raise Exception("账号%s加款失败"% 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(source_acctid, money)
            self.conn.commit()
        except Exception, 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='127.0.0.1', user='root',passwd='12345678', db='imooc', charset='utf8mb4')
    tr_money = TransferMoney(conn)
    #检查转账是否成功。
    try:
        tr_money.transfer(source_acctid, target_acctid, money)
    except Exception, e:
        print "出现问题:" + str(e)
    finally:
        conn.close()

上面就是所有代码内容了,希望对大家有所帮助。

如果想快速联系我,欢迎关注微信公众号:AiryData。

也可以访问原文链接: Python连接pymysql库实现简单的转账功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值