Python操作MySQL模拟银行转账
作者:freedom098 发布时间:2022-05-19 21:23:11
标签: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()
来源:http://blog.csdn.net/freedom098/article/details/50277199
0
投稿
猜你喜欢
- 概 述 现在有不少介绍利用ASP实现动态分页的文章,方法大同小异,就是每次利用ADO返回原始数据满足条件记录集中的指定
- 在开发数据库应用中,经常会遇到处理时间的问题,如查询指定时间的记录等。下面就这些常见的问题,结合自己的一些经验,和大家探讨一下这类问题。首先
- 导航栏是一个很好的功能,是Bootstrap 网站的一个突出特点。导航栏是响应式元组件就,作为应用程序或网站的导航标题。导航栏在移动设备的视
- 你可能在使用MySQL过程中,各种意外导致数据库表的损坏,而且这些数据往往是最新的数据,通常不可能在备份数据中找到。本章将讲述如何检测MyS
- 前言Iframe 是一种将网页嵌入到另一个页面的内容中的方法。这是通过使用 HTML 元素、外部网站的 URL 以及窗口在您的网站上的外观参
- Gmail 作为一个经典的 Web 2.0 应用,在带来革命性的邮件管理体验的同时,以其完整、快速的 AJAX 操作方式,深受用户的推崇和技
- 今天遇到一个需要用javascript将url中的某些参数替换的需求,想起了不久前从网上淘到了一个parseUrl函数,正好可以借此实现,代
- 方法1: 将shell执行的结果保存到字符串def run_cmd(cmd): result_str='' process
- 如题:我写入关键字到数据库,多的时候用|隔开了,我提取再做相关文章搜索的时候,我怎么提取用|隔开的文字啊,这样我就好用关键字做搜索啊 回复:
- 通常的聊天室所采用的程序,也就是Chat程序了,其基本结构原理是不会采用到数据库的。那究竟采用什么技术呢?我们知道ASP变量当中Sessio
- 代码如下:USE [tempdb] GO /****** Object: UserDefinedFunction [dbo].[fun_ge
- 本文将介绍PHP中单引号和双引号的区别。PHP中单引号和双引号简介在 PHP 中,我们使用引号来指定值是字符串文字。有两种不同类型的报价。它
- 需要准备的工具:SQL Query Analyzer和SqlExec Sunx Version第一部分:去掉xp_cmdshell保护系统的
- 没什么说的,就是生成随机数而已!!相关文章推荐:8个asp生成随机字符的函数<% Function gen_key(digi
- 微软 Office 提供基于 COM 接口的编程。Python 通过 pywin32 可以方便地调用各组件。如果下载和安装 pywin32
- XML的未来 现在你已经知道XML。确实,结构有点复杂,而且DTD有各种可以定义文档可以包含的内容的选项。但还不只这些。考虑一个数据交换对其
- 对于access数据库的日期时间类型字段存储的日期,直接从数据库中读出显示的效果是带时间的如,2009-06-13 18:00 ,如果只是希
- 我们平日办公时用得最多的软件是Execl、Word或WPS Office等,你的计算机中一定储存着大量的XLS、DOC、WPS文件吧!网页制
- 本文记录了python安装及环境配置方法,具体内容如下Python安装 Windowns操作系统中安装Python步骤一 下载安装包从Pyt
- 1.什么是Javascript?Javascript是一种用于Web开发的编程语言。JavaScript在网络的客户端上运行。根据MDN,J