Python3连接MySQL(pymysql)模拟转账实现代码
本文实例为大家分享了Python3连接MySQL模拟转账的具体实现代码,供大家参考,具体内容如下
#coding:utf8
importsys
importpymysql
classTransferMoney(object):
def__init__(self,conn):
self.conn=conn
defcheck_acct_available(self,acctid):
cursor=self.conn.cursor()
try:
sql="select*fromaccountwhereacctid=%s"%acctid
cursor.execute(sql)
print("check_acct_available:"+sql)
rs=cursor.fetchall()
iflen(rs)!=1:
raiseException("账号%s不存在"%acctid)
finally:
cursor.close()
defhas_enough_money(self,acctid,money):
cursor=self.conn.cursor()
try:
sql="select*fromaccountwhereacctid=%sandmoney>%s"%(acctid,money)
cursor.execute(sql)
print("has_enough_money:"+sql)
rs=cursor.fetchall()
iflen(rs)!=1:
raiseException("账号%s余额不足"%acctid)
finally:
cursor.close()
defreduce_money(self,acctid,money):
cursor=self.conn.cursor()
try:
sql="updateaccountsetmoney=money-%swhereacctid=%s"%(money,acctid)
cursor.execute(sql)
print("reduce_money:"+sql)
ifcursor.rowcount!=1:
raiseException("账号%s减款失败"%acctid)
finally:
cursor.close()
defadd_money(self,acctid,money):
cursor=self.conn.cursor()
try:
sql="updateaccountsetmoney=money+%swhereacctid=%s"%(money,acctid)
cursor.execute(sql)
print("add_money:"+sql)
ifcursor.rowcount!=1:
raiseException("账号%s加款失败"%acctid)
finally:
cursor.close()
deftransfer(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()
exceptExceptionase:
self.conn.rollback()
raisee
if__name__=="__main__":
source_acctid=sys.argv[1]
target_acctid=sys.argv[2]
money=sys.argv[3]
conn=pymysql.Connect(
host='localhost',
unix_socket="..mysql/mysql.sock",
port=3306,
user='root',
passwd='',
db='python_db',
)
tr_money=TransferMoney(conn)
try:
tr_money.transfer(source_acctid,target_acctid,money)
exceptExceptionase:
print("出现问题"+str(e))
finally:
conn.close()
以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。