#coding:utf8
#转账系统
import sys
import MySQLdb
class TransferMoney(object):
def __init__(self, conn):
self.conn = conn
def check_acct_available(self, id):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s" % id
print sql
cursor.execute(sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("id %s is not existed" % id)
finally:
cursor.close()
def has_enough_money(self, id, money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s and money>%s" % (id, money)
print sql
cursor.execute(sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("id %s doesn't have enough money" % id)
finally:
cursor.close()
def reduce_money(self, id, money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money-%s where acctid=%s" % (money, id)
print sql
cursor.execute(sql)
if cursor.rowcount != 1:
raise Exception("id %s reduces unsuccessfully" % id)
finally:
cursor.close()
def add_money(self, id, money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money + %s where acctid = %s" % (money, id)
print sql
cursor.execute(sql)
if cursor.rowcount != 1:
raise Exception("id %s adds unsuccessfully" % id)
finally:
cursor.close()
def transfer(self,source_id, target_id, money):
try:
self.check_acct_available(source_id)
self.check_acct_available(target_id)
self.has_enough_money(source_id, money)
self.reduce_money(source_id, money)
self.add_money(target_id, money)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
if __name__ == "__main__":
source_id = sys.argv[1]
target_id = sys.argv[2]
money = sys.argv[3]
conn = MySQLdb.Connect(host='127.0.0.1',user='root', passwd = '', \
port = 3306, db = 'python')
tr_money = TransferMoney(conn)
try:
tr_money.transfer(source_id, target_id, money)
except Exception as e:
print "出现问题"+str(e)
finally:
conn.close()
【实例】 python数据库编程
最新推荐文章于 2024-07-12 14:00:11 发布