Python 操作MySQL实例之银行转账模拟

       今天在慕课网上学习了有关于python操作MySQL的相关知识,在此做些总结。python操作数据库还是相对比较简单的,由于python统一了各个数据库的接口程序,也就是所谓的Python DB,所以无论使用何种数据可,都可以用统一的接口对数据库进行操作。操作中主要涉及connection对象的操作和cursor的操作,前者主要是为了建立起python与数据库的数据交换通道,后者则是访问数据的游标,也可以理解为指针。数据库的相关结构化语言在Python中均是以字符串的形式呈现的。另外注意rollback的重要性,一旦操作失败,所有操作都要回滚到之前的状态,否则会发生错误。

另外,在编写实例的时候,对于面向对象的编程思路又有了新的认识,自顶向下的程序编写模式非常有利于拆分程序的功能,分而治之。面向对象的封装性在此提醒的淋漓尽致!

代码如下,在原有基础上,我又增加了添加记录的功能。

#coding=utf8
import MySQLdb
import sys

class TranseferMonet(object):

    def __init__(self,conn):
        self.conn = conn

    def createNewUser(self,userID,money):
        cursor = self.conn.cursor()
        try:
            sql = 'INSERT account VALUES(%s,%s)' %(str(userID),str(money))
            cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            raise e

    def transferMoney(self,transeferID,recivierID,money):
        try:
            self.checkID(transeferID)
            self.checkID(receiverID)
            self.checkEnoughMoney(transferID,money)
            self.subMoney(transferID,money)
            self.addMoney(receiverID,money)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            raise e

    def checkID(self,userID):
        cursor = self.conn.cursor()
        try:
            sql = 'SELECT userID FROM account WHERE userID = %s' %str(userID)
            cursor.execute(sql)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception("ID错误!")
        finally:
            cursor.close()

    def checkEnoughMoney(self,transferID,money):
        cursor = self.conn.cursor()
        try:
            sql = 'SELECT money FROM account WHERE userID = %s and money >= %s' %(str(transferID),str(money))
            cursor.execute(sql)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception("余额不足!")
        finally:
            cursor.close()
    def subMoney(self,transferID,money):
        cursor = self.conn.cursor()
        try:
            sql = 'UPDATE account SET money = money-%s WHERE userID = %s' %(str(money),str(transferID))
            cursor.execute(sql)
            if cursor.rowcount != 1:
                raise Exception('减款失败!')
        finally:
            cursor.close()

    def addMoney(self,receiverID,money):

        cursor = self.conn.cursor()
        try:
            sql = 'UPDATE account SET money = money+%s WHERE userID = %s' %(str(money),str(receiverID))
            cursor.execute(sql)
            if cursor.rowcount != 1:
                raise Exception('加款失败!')
        finally:
            cursor.close()

if __name__=="__main__":

    transferID = 2002
    receiverID = 2001
    money = 300

    newID = 2003
    newmoney = 900

    conn = MySQLdb.connect(host = '127.0.0.1',port = 3306,user = 'root',passwd = '914767195',db = 'test',charset = 'utf8')

    trMoney = TranseferMonet(conn)

    try:
        trMoney.transferMoney(transferID,receiverID,money)
    except Exception as e:
        print "转账错误"+str(e)
    try:
        trMoney.createNewUser(newID,newmoney)
    except Exception as e:
        print "创建用户失败!"+str(e)
    finally:
        conn.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值