今天在慕课网上学习了有关于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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Python操作MySQL模拟银行转账”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]