今天在慕课网上学习了有关于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模拟银行转账”评论...
更新动态
2025年10月24日
2025年10月24日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]