#!/usr/bin/env python
# coding:utf-8
"""
@Name: mysql_01.py
@Author: lvah
@Date:2/28/18
@Connect: xc_guofan@163.com
@Desc:
银行转账的数据库实现;
"""
print "mysql_01.py代码结果展示:"
import sys
import MySQLdb as mysql
# 抽象出一个转账的类;
class TransferMoney(object):
def __init__(self, conn):
self.conn = conn
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, e:
self.conn.rollback()
raise e
def check_acct_available(self, acct_id):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s" % (acct_id)
cursor.execute(sql)
print "check_acct_available:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("帐号%s不存在" % acct_id)
finally:
cursor.close()
def has_enough_money(self, acct_id, money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s and money > %s" % (acct_id, money)
cursor.execute(sql)
print "has_enough_money:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("帐号%s没有足够的钱" % acct_id)
finally:
cursor.close()
def reduce_money(self, acct_id, money):
cursor = self.conn.cursor()
try:
sql = "update account set money=money-%s where acctid=%s" % (money, acct_id)
cursor.execute(sql)
print "reduce_money:" + sql
if cursor.rowcount != 1:
raise Exception("帐号%s减款失败" % acct_id)
finally:
cursor.close()
def add_money(self, acct_id, money):
cursor = self.conn.cursor()
try:
sql = "update account set money=money+%s where acctid=%s" % (money, acct_id)
cursor.execute(sql)
print "reduce_money:" + sql
if cursor.rowcount != 1:
raise Exception("帐号%s加款失败" % acct_id)
finally:
cursor.close()
if __name__ == "__main__":
# source_acctid = sys.argv[1]
# target_acctid = sys.argv[2]
# money = sys.argv[3]
source_acctid = 2
target_acctid = 1
money = 100
conn = mysql.connect(host='localhost', user='root', passwd='westos', db='bank_data')
tr_money = TransferMoney(conn)
try:
tr_money.transfer(source_acctid, target_acctid, money)
except Exception, e:
print "出现问题:" + str(e)
finally:
conn.close()
【python-mysql】| 银行转账案例代码
最新推荐文章于 2021-12-15 20:15:49 发布