• python 简单的数据库操作之转账


    介绍:本文是关于数据库的简单操作,实现转账(只是修改数据库中用户的账户金额)的功能

    模块介绍:首先是入口主函数 主函数中实现转账方法  以及异常的处理:

      

    if __name__ == "__main__":
        source_acctid = sys.argv[1] #获取命令行第一个参数
        target_acctid = sys.argv[2]
        money = sys.argv[3]
        
        #连接数据库
        conn = MySQLdb.Connect(host = '127.0.0.1',user = 'root',passwd = 'root',port = 3306,db = 'account')
        tr_money = TransferMoney(conn)
        
        try:
            tr_money.transfer(source_acctid,target_acctid,money)  #转账操作
        except Exception as e:
            print "出现问题" + str(e)
        finally:
            conn.close()#关闭数据库连接
     

    然后是实现转账的类,以及类中实现的方法 1.判断用户账户中的金额 2.判断账户是否存在 3.扣除账户金额  4.增加账户金额

    class TransferMoney(object):
        
        def __init__(self, conn):
            self.conn = conn
            
        
        def check_acct_available(self, acctid):
            cursor = self.conn.cursor()
            try:
                sql = "select * from account_user where accountid=%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_user where accountid=%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_user set money=money-%s where accountid=%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_user set money=money+%s where accountid=%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(target_acctid,money) #转账加钱
                self.conn.commit() 
            except Exception as e:
                self.conn.rollback()  #如果有步骤出错 则事务回滚
                raise e     # raise的作用是将异常抛出到上一级处理


  • 相关阅读:
    概念理解及常用方法
    WeX5触发事件
    前端页面问题小结
    高性能 CSS3 动画
    IScroll5中文API整理,用法与参考
    关于浏览器兼容之mate标签
    HTMl5的sessionStorage和localStorage
    web app iphone4 iphone5 iphone6 响应式布局 适配代码
    Javascript模板引擎分享
    css3 media媒体查询器用法总结
  • 原文地址:https://www.cnblogs.com/tonghao/p/8506037.html
Copyright © 2020-2023  润新知