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

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

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的作用是将异常抛出到上一级处理

python 简单的数据库操作之转账的更多相关文章

  1. [python]用Python进行SQLite数据库操作

    用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~  ]: u ...

  2. 使用python简单连接并操作数据库

    python中连接并操作数据库 图示操作流程 一.使用的完整流程 # 1. 导入模块 from pymysql import connect # 2. 创建和数据库服务器的连接,自行设置 服务器地址, ...

  3. python对mysql数据库操作的三种不同方式

    首先要说一下,在这个暑期如果没有什么特殊情况,我打算用python尝试写一个考试系统,希望能在下学期的python课程实际使用,并且尽量在此之前把用到的相关技术都以分篇博客的方式分享出来,有想要交流的 ...

  4. Python进行MySQL数据库操作

    最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...

  5. PHP开发-最简单的数据库操作,使用ezSQL

    PHP数据库操作使用ezSQL来实现,简单好用. 如果用的是mysql数据库,将下载的ezSQL文件中的mysql和shared连个文件夹拷贝到PHP工程目录中引用即可. 在PHP文件中 // Inc ...

  6. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

  7. Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作

    SQLite  是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...

  8. [置顶] Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作

    SQLite  是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...

  9. Django简单的数据库操作

    当然,本篇的前提是你已经配置好了相关的环境,这里就不详细介绍. 一. 在settings.py文件中设置数据库属性. 如下: DATABASES = { 'default': { 'ENGINE': ...

随机推荐

  1. linux monitor and maintanence

    @cacti 1.install epel extends source 2.install lamp use yum method yum install -y httpd php php-mysq ...

  2. git教程5-查看关系图与no fast forward融合

    1.每一个提交相当于一个版本,版本都有版本号与之对应.通常通过git commit -m "name"为每次提交命名. 2.融合:即将次分支的最后一个版本添加到主分支上.当融合冲突 ...

  3. SQL-表的操作(创建表,删除表,更改列,插入新行,更改行的值,删除表中数据)

    一,操作表及列 1.创建表: CREATE TABLE test (ID int  PRIMARY KEY IDENTITY,Name varchar(20) ) 2.删除表 DROP TABLE t ...

  4. tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定

    tf.ConfigProto()函数用在创建session的时候,用来对session进行参数配置: config = tf.ConfigProto(allow_soft_placement=True ...

  5. MySQL安装后默认自带数据库的作用

    大家在学习MySQL时,安装后都会发现里边已经自带了几个默认的数据库,我装的MySQL5.5里边自带六个数据库 网上查了一些资料对这几个数据库的功能做一下学习. 1.information_schem ...

  6. Linux命令学习(20):traceroute命令

    版权声明 更新:2017-06-13博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的mv命令. 2 ...

  7. lower_bound()函数与quicksort()函数的简单掌握

    lower_bound 这个序列中可能会有很多重复的元素,也可能所有的元素都相同,为了充分考虑这种边界条件,STL中的lower_bound算法总体上是才用了二分查找的方法,但是由于是查找序列中的第一 ...

  8. BZOJ3262:陌上花开

    浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...

  9. System.Data.SQLite.dll控件常规安装方法

    原文地址:http://www.jb51.net/dll/System.Data.SQLite.dll.html 文件运行必须安装   Microsoft Visual C++ 2010 SP1 Re ...

  10. Gradle 配置

    下载Gradle https://gradle.org/releases/ https://services.gradle.org/distributions/gradle-4.4.1-bin.zip ...